ORACLE 回滚和触发器

6

如果发生回滚,那么“更新后”触发器会触发吗?

情景:我们假设我们更新了一个A表,A表上的触发器将触发并使用详细信息更新另一个B表。如果由于某些处理错误在A表上发出回滚命令,那么触发器是否会导致B表回滚更改?

2个回答

10

是的,它会。

触发器的作用范围在 DML 语句的事务内(由您显式启动或 DML 语句本身隐式启动)。

当此事务被回滚时,所有由触发器进行的更改也将被回滚。

但是,如果你把

PRAGMA autonomous_transaction

将事务嵌入触发器定义中后,触发器将启动自己的事务,您应该在触发器完成之前提交该事务。


1
因此,如果您想记录所有尝试执行更新的操作(即使它们失败或被回滚),则自主事务很好,但是如果您只希望在触发更新成功并提交时执行触发操作,则不适用。请注意! - Tony Andrews
1
你需要为自主事务显式提交COMMIT。如果没有,它将失败并显示“ORA-06519:检测到活动的自主事务并已回滚”。 - jva

3

请注意 - 如果定义了AFTER UPDATE语句级触发器(没有FOR EACH ROW子句),则如果表上的DML语句失败并回滚,它将不会触发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接