这是实际场景的简化;在哪里可以看到表 B 上缺失的记录。
假设有两个数据库表 A ; B.
表 A 上有一个插入触发器;它对表 B 进行插入(但它没有 COMMIT;)。
如果我们通过 JDBC 连接器打开数据库连接;并对表 A 进行插入;并提交;
触发器的行为是什么? B表的insert语句会自动提交吗?
触发器不仅不需要 COMMIT,而且还不能放入 COMMIT:如果主体的代码包含 COMMIT(或回滚),触发器将无法编译。
这是因为触发器在事务期间触发。当触发器触发时,当前事务仍未完成。当 COMMIT 终止事务时,允许它们进入触发器会破坏工作单元。
因此,触发器中执行的更改由发出触发触发器的 DML 的所属事务提交(或回滚)。
确实,触发器可以在 PRAGMA AUTONOMOUS_TRANSACTION 下运行,在这种情况下它们必须有一个 COMMIT。但这是一种边缘情况,因为 Oracle 中嵌套事务的有意义的用途很少。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)