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;
がエラーを取得します。エラー:PLS-00201:識別子 'EADEMPID'を宣言する必要があります 行:9 テキスト:NEW.EADEMPID LIKE 'A%' THEN '1V' || EADEMPID は エラー:PL/SQL:8 テキスト: ラインを無視声明emcode:CASE – Sam
@Samを=:申し訳ありませんが、 'を忘れてしまった:new' –
はありがとうございました。できます。 :) – Sam