2017-03-04 11 views
-1
create or replace TRIGGER R_TRACKER_TRI 
    before insert on R_TRACKER 
    for each row 
    declare 
    v_number varchar2(15); 
    begin 

     if inserting then 
     :NEW.PROJECT_ID := PROJECT_ID(1); 
     :NEW.PRO_CREATED := LOCALTIMESTAMP; 
     :NEW.PRO_CREATED_BY := nvl(v('APP_USER'),USER); 

     IF :NEW.RECRUITMENT_TYPE= 'New' THEN 

      SELECT ('NEW/'||TO_CHAR(SYSDATE,'YY') || '/' || (NVL(MAX(SUBSTRB(PROJECT_ID,8)),10000)+1)) into v_number 
      FROM R_TRACKER 
      WHERE SUBSTRB(PROJECT_ID,1,3) = 'NEW'; 

      :NEW.PROJECT_ID := v_number; 

      elsif :NEW.RECRUITMENT_TYPE= 'Replacement' THEN 

      SELECT ('REP/'||TO_CHAR(SYSDATE,'YY') || '/' || (NVL(MAX(SUBSTRB(PROJECT_ID,8)),10000)+1)) into v_number 
      FROM R_TRACKER 
      WHERE SUBSTRB(PROJECT_ID,1,3) = 'REP'; 
      :NEW.PROJECT_ID := v_number; 

     end if; 
INSERT INTO R_TRACKER 
      (
       PROJECT_ID, 
       PRO_LOC, 
       DESIGNATION, 
       NO_OF_POSITION, 
       VACANCY_SINCE, 
       STATUS, 
       REMARKS, 
       UPLOAD, 
      RECRUITMENT_TYPE, 
      APPROVAL, 
      ACTION 
      ) 
      VALUES 
      (
       :NEW.PROJECT_ID, 
       :NEW.PRO_LOC, 
       :NEW.DESIGNATION, 
       :NEW.NO_OF_POSITION, 
       :NEW.VACANCY_SINCE, 
       :NEW.STATUS, 
       :NEW.REMARKS 
       :NEW.UPLOAD, 
      :NEW.RECRUITMENT_TYPE, 
      :NEW.APPROVAL, 
      :NEW.ACTION 
      );   
       end if; 
       end; 
+0

上--triggerは同じで補正を行った後、私はPLS-00201のエラーMSGを取得しています秀ずっとGurvありがとう:識別子 'PROJECT_ID' はdeclaredCompilationがl –

+0

、失敗しなければなりませんR_TRACKERの中にPROJECT_IDがあることを確認できますか? – mmmmmpie

答えて

1

に関連付けられた行番号はあなたのコードを見てみると1あなたはTriggerの使用を理解する必要があること作ることができます。それをお読みください。簡単に私はtriggertableのイベントであると言いたいと思っていました。このテーブルの列値の挿入/更新/削除を自動化するために作成されます。あなたのケースでは、テーブルR_TRACKERにトリガーを作成してから、insertingに再度トリガーを作成しています。これは間違っています。あなたがそれをどうやってできるかを見てください。

--Table 
CREATE TABLE R_TRACKER 
(
    PROJECT_ID   VARCHAR2 (50), 
    PRO_LOC   VARCHAR2 (50), 
    DESIGNATION  VARCHAR2 (50), 
    NO_OF_POSITION  VARCHAR2 (50), 
    VACANCY_SINCE  VARCHAR2 (50), 
    STATUS    VARCHAR2 (50), 
    REMARKS   VARCHAR2 (50), 
    UPLOAD    VARCHAR2 (50), 
    RECRUITMENT_TYPE VARCHAR2 (50), 
    APPROVAL   VARCHAR2 (50), 
    ACTION    VARCHAR2 (50) 
); 

テーブル

CREATE OR REPLACE TRIGGER R_TRACKER_TRI 
    BEFORE INSERT ON R_TRACKER 
    FOR EACH ROW 
DECLARE 
    v_number VARCHAR2 (15); 
BEGIN 
    IF INSERTING 
    THEN 
     :NEW.PROJECT_ID := '1';--PROJECT_ID(1) -- This seems to be a function in your case; 
    --:NEW.PRO_CREATED := LOCALTIMESTAMP; 
    -- :NEW.PRO_CREATED_BY := NVL('APP_USER', USER); 

     IF :NEW.RECRUITMENT_TYPE = 'New' 
     THEN 
     SELECT ( 'NEW/' 
       || TO_CHAR (SYSDATE, 'YY') 
       || '/' 
       || (NVL (MAX (SUBSTRB (PROJECT_ID, 8)), 10000) + 1)) 
      INTO v_number 
      FROM R_TRACKER 
      WHERE SUBSTRB (PROJECT_ID, 1, 3) = 'NEW'; 

     :NEW.PROJECT_ID := v_number; 

     ELSIF :NEW.RECRUITMENT_TYPE = 'Replacement' 
     THEN 
     SELECT ( 'REP/' 
       || TO_CHAR (SYSDATE, 'YY') 
       || '/' 
       || (NVL (MAX (SUBSTRB (PROJECT_ID, 8)), 10000) + 1)) 
      INTO v_number 
      FROM R_TRACKER 
      WHERE SUBSTRB (PROJECT_ID, 1, 3) = 'REP'; 

     :NEW.PROJECT_ID := v_number; 
     END IF; 

    END IF; 
END; 
関連する問題