CREATE OR REPLACE TRIGGER del_info
BEFORE DELETE
ON emp
REFERENCING NEW AS new OLD AS old
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF :old.ename = 'GAU'
THEN
INSERT INTO audit_table (who, dated)
VALUES (USER, TO_CHAR (SYSDATE, 'dd-mon-yyyy hh24:mi:ss'));
COMMIT;
raise_application_error (
-20001,
'You Are not authorized to delete this record');
ELSE
NULL;
END IF;
END;
这里有一个问题。如果我使用where子句删除任何用户,它工作正常,但如果我从emp中解除像delete这样的查询,那么它会产生问题,即它不会删除任何记录。理想的行为应该是,它不应该删除单个recors(ename ='GAU'),其余的都应该被删除。请帮忙
答案 0 :(得分:1)
您不能接受部分交易并在其他部分引发错误。
解决方法:Phoenix模式!
删除记录后,将其重新插入。
更好的方法:
第3个解决方案:
有关如何使用/不使用触发器的更多信息是here