2017-03-05 21 views
-1

エラー:ORA-04088:トリガーの実行中にエラーが発生し

ORA-00036: maximum number of recursive SQL levels (50) exceeded 
ORA-00036: maximum number of recursive SQL levels (50) exceeded 
ORA-06512: at "SYS.STANDARD", line 180 
ORA-06512: at "ETRACKER.R_TRACKER_TRI", line 7 
ORA-04088: error during execution of trigger 'ETRACKER.R_TRACKER_TRI' 
ORA-06512: at "ETRACKER.R_TRACKER_TRI", line 24 
ORA-04088: error during execution of trigger 'ETRACKER.R_TRACKER_TRI' 
ORA-06512: at "ETRACKER.R_TRACKER_TRI", line 24 ORA-04088: error during execution of trigger 'ETRACKER.R_TRACK 

トリガーコード:

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); 
     :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, 
+3

なぜ、トリガーが反対のテーブルに新しい行を挿入していますか?あなたはその挿入にどのような値を使用していますか? ':new'疑似コードフィールド? (あなたも 'v_number'変数は必要ありません。':new.project_id'フィールドに直接選択することができます;新しい/置換のために* 2つのクエリを必要としません。シーケンスを使う方がはるかに良いでしょう現在の最大ID + 1を取得するよりも)。 –

+0

読みやすいようにフォーマットされたエラースタック。 –

答えて

0

あなたのトリガは、再帰的なトリガーですので。あなたはthis article

0

あなたはR_TRACKERと

  • に行レベルのINSERTトリガーを発射している

    • あなたが同じテーブルへの挿入を行っているので、あなたのトリガが無限ループに起こっているR_Tracker
    を読むことができます

    完全なトリガーコードを送信できますか?

  • 関連する問題