Don*_*Don 1 oracle database-trigger
这是实际情况的简化;在哪里可以看到表B上缺少的记录。
假设有两个数据库表A;B.
表A上有一个on insert触发器;它可以对表B进行插入(但它没有COMMIT;)。如果我们通过JDBC连接器打开数据库连接;并在表A上插入;并提交;触发器的行为是什么?是否将它自动提交到表B上的插入语句?
触发器不仅不需要COMMIT,而且您不能放入COMMIT:如果主体的代码中包含COMMIT(或回滚),则触发器不会编译。
这是因为在交易过程中会触发火灾。当触发器触发时,当前事务仍未完成。当COMMIT终止事务时,允许它们进入触发器将破坏工作单元。
因此,在触发器中执行的更改由拥有的事务提交(或回滚),该事务发出了触发触发器的DML。
确实可以在PRAGMA AUTONOMOUS_TRANSACTION下运行触发器,在这种情况下,它们必须具有COMMIT。但这是一个极端的情况,因为在Oracle中很少有嵌套事务的有意义的使用。