【问题标题】:ORACLE Rollback and TriggerORACLE 回滚和触发
【发布时间】:2010-11-09 10:29:27
【问题描述】:

如果有回滚,更新后触发器是否会启动?

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

【问题讨论】:

    标签: oracle triggers


    【解决方案1】:

    是的,会的。

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

    当此事务回滚时,触发器所做的所有更改也会回滚。

    但是,如果你把

    PRAGMA autonomous_transaction
    

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

    【讨论】:

    • 因此,如果您想记录所有 ATTEMPTS 以执行更新(即使它们失败或回滚),那么自治事务是好的,但如果您只想在触发更新时执行触发的操作,则不好成功并承诺。当心!
    • 您需要明确的 COMMIT 来进行自主事务。如果不这样做,它将失败并显示“ORA-06519:检测到活动的自主事务并回滚”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2019-09-27
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多