-3

我在表 A 上有 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;
/

为什么 after insert 中的 update 命令不起作用(状态未设置为 DONE)?我错过了什么吗?

4

1 回答 1

0

问题很可能是由于AUTONOMOUS_TRANSACTION- 当你这样做时,你实际上是切换到另一个事务,它不会知道你未提交的事务(即你的插入),所以它没有什么可以更新的。

您应该做的是修改:new.status := 'DONE'前触发器中的列 ( )。或者,更好的是,避免触发器并在存储过程中包含逻辑,并且不允许任何人直接插入表中,尽管我很欣赏这可能是一个很大的转变,如果你有很多应用程序直接插入表等

于 2015-05-26T11:14:49.703 回答