2017-01-21 2 views
0

に問題があります。実行中にに問題があります。エラーなしで正常にコンパイルされますが、実行しようとするとエラーORA-04091 table is mutatingがスローされます。私は実際に新しいレコードがテーブル(ATTD_DETAILS)に追加されたときにテーブル(ATTDETAIL)に行を挿入しようとしています。 を新しいフォーマットに置き換える必要があります。Trigger in Oracleのケース・ステートメント

トリガー

CREATE OR REPLACE TRIGGER ATTENDANCE 
AFTER INSERT ON ATTD_DETAILS 
FOR EACH ROW 
DECLARE 
    EMCODE VARCHAR2(50) := 'NA'; 
BEGIN 

     SELECT CASE 
    WHEN EAD.EADEMPID LIKE 'A%' THEN 
     '1V' || EADEMPID 
    WHEN EAD.EADEMPID LIKE 'C%' THEN 
     'LM' || EADEMPID 
    WHEN EAD.EADEMPID LIKE 'S%' THEN 
     'LM' || EADEMPID 
     ELSE EAD.EADEMPID 
     END INTO EMCODE 
    FROM ATTD_DETAILS EAD 
    WHERE EAD.EADEMPID = :NEW.EADEMPID; 

    IF (:NEW.EADREMARKS = 'Successful' OR :NEW.EADREMARKS = 'SUCCESSFUL') THEN 
    INSERT INTO ATTDETAIL 
    (CODE, 
    CARDID, 
    ATT_DATE, 
    ATT_TIME, 
    EMPID, 
    PROCODE) 
    VALUES 
    (:NEW.EADSITECODE, 
    :NEW.EADEMCARDID, 
    :NEW.EADATT_DATE, 
    :NEW.EADATT_TIME, 
    EMCODE, 
    '880'); 
    END IF; 
    END; 

答えて

2

あなただけ挿入された行に基づいてemcodeに価値を提供したいと仮定すると、あなたは:NEWレコードから列をチェックする必要があります。トリガー表から選択することはできません(行レベル・トリガー内)。私はあなたがしたいと思います

は次のとおりです。complingながら

CREATE OR REPLACE TRIGGER ATTENDANCE 
AFTER INSERT ON ATTD_DETAILS 
FOR EACH ROW 
DECLARE 
    EMCODE VARCHAR2(50) := 'NA'; 
BEGIN 

    emcode := CASE 
     WHEN :new.EADEMPID LIKE 'A%' THEN '1V' || :new.EADEMPID 
     WHEN :new.EADEMPID LIKE 'C%' THEN 'LM' || :new.EADEMPID 
     WHEN :new.EADEMPID LIKE 'S%' THEN 'LM' || :new.EADEMPID 
     ELSE :new.EADEMPID 
     END; 

    IF (:NEW.EADREMARKS = 'Successful' OR :NEW.EADREMARKS = 'SUCCESSFUL') THEN 
    INSERT INTO ATTDETAIL 
    (CODE, 
    CARDID, 
    ATT_DATE, 
    ATT_TIME, 
    EMPID, 
    PROCODE) 
    VALUES 
    (:NEW.EADSITECODE, 
    :NEW.EADEMCARDID, 
    :NEW.EADATT_DATE, 
    :NEW.EADATT_TIME, 
    EMCODE, 
    '880'); 
    END IF; 
END; 
+0

がエラーを取得します。エラー:PLS-00201:識別子 'EADEMPID'を宣言する必要があります 行:9 テキスト:NEW.EADEMPID LIKE 'A%' THEN '1V' || EADEMPID は エラー:PL/SQL:8 テキスト: ラインを無視声明emcode:CASE – Sam

+0

@Samを=:申し訳ありませんが、 'を忘れてしまった:new' –

+0

はありがとうございました。できます。 :) – Sam