我在表上有2个触发器一个是BEFORE INSERT,一个是AFTER INSERT:
CREATE OR REPLACE TRIGGER DEMO_TRG
AFTER INSERT
ON A
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
PRAGMA AUTONOMOUS_TRANSACTION;
begin
UPDATE A
SET STATUS = 'DONE'
WHERE id_id =:new.p_id;
commit;
END;
/
为什么后插入中的更新命令不起作用(状态未设置为DONE)?我错过了什么吗?
答案 0 :(得分:0)
问题很可能是AUTONOMOUS_TRANSACTION
引起的 - 当你这样做时,你实际上是切换到另一个交易,这个交易不会知道你的未提交交易(即你的插入),所以那里没有什么可以更新。
您应该做的是修改之前触发器中的列(:new.status := 'DONE'
)。或者,更好的是,避免使用触发器并在存储过程中使用逻辑,并且不允许任何人直接插入表中,尽管我很欣赏如果您有大量应用程序直接插入表等,这可能是一个很大的转换