'A'
で変数をバインドすることを指している :OLD.AWitnessID
のように、開始時にアンダースコアはありません 、ただし、テーブルの列はWITNESS_ID
です。 。したがって、それらは一致せず、このエラーを生成します。 WITNESS_TYPE
さえありません 列。
次に、insert
に 監査テーブルの列名も間違っているステートメント。また、変数をUpdate
に設定します ただし、UPDATE
を確認してください -文字列値の比較では大文字と小文字が区別されることを忘れないでください。
これはスキーマでコンパイルされます:
CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
FOR EACH ROW
DECLARE
v_trigger_task varchar2(10);
BEGIN
IF UPDATING THEN
v_trigger_task := 'UPDATE';
ELSIF DELETING THEN
v_trigger_task := 'DELETE';
ELSIF INSERTING THEN
v_trigger_task := 'INSERT';
ELSE
v_trigger_task := NULL;
END IF;
IF v_trigger_task IN ('DELETE','UPDATE') THEN
INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
AUDIT_DATE, AUDIT_ACTION)
VALUES (:OLD.Witness_ID, :OLD.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
SYSDATE, v_trigger_task);
ELSE
INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
AUDIT_DATE, AUDIT_ACTION)
VALUES (:NEW.Witness_ID, :NEW.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
SYSDATE, v_trigger_task);
END IF;
END TRG_PLAUDWIT;
/