Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE回滚和触发器_Oracle_Triggers - Fatal编程技术网

ORACLE回滚和触发器

ORACLE回滚和触发器,oracle,triggers,Oracle,Triggers,如果发生回滚,更新后触发器是否会启动 场景:假设我们更新一个表a,表a上的触发器启动并用细节更新另一个表B。如果由于某些处理错误而对表a发出回滚,触发器是否会导致表B回滚更改?是的,它会 触发器在DML语句的事务范围内工作(由您显式启动或由DML语句本身隐式启动) 回滚此事务时,触发器所做的所有更改也将回滚 然而,如果你把 PRAGMA autonomous_transaction 在触发器定义中,触发器将启动自己的事务,您应该在触发器完成之前提交该事务。请注意-如果您定义了更新后语句级触发器

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

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

是的,它会

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

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

然而,如果你把

PRAGMA autonomous_transaction

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

请注意-如果您定义了更新后语句级触发器(不带FOR EACH ROW子句)如果表上的DML语句失败并回滚,它将不会触发。

因此,如果要记录执行更新的所有尝试(即使它们失败或回滚),则自治事务是好的;如果只希望在触发更新成功并提交时执行触发操作,则自治事务是坏的。当心!自治事务需要显式提交。如果不这样做,它将失败并显示“ORA-06519:检测到并回滚活动的自治事务”