oracle 触发器与事务

时间:2022-05-07 05:11:25

(1)如果外部事务撤销,触发器形成的变更是否会撤销?如果触发器操作失败,是否会导致外部SQL失败,从而导致事务撤销
(2) 事务回滚时,触发器形成的变更是否会撤销;
(3) 触发器失败时,外部SQL是否会返回错误;如果会,则研究如何不返回错,如果不会,则研究如何会返回错误;
(4) 触发器失败时(插入两条记录,前者成功,后者失败),事务回滚时触发器形成的变更是否会撤销;
(5) 触发器失败时(插入两条记录,前者成功,后者失败),事务提交时触发器形成的变更是否会撤销;

答 在oracle中,对触发器的限制是:
1。触发器与触发该触发器的SQL语句同属于一个事务,触发器不允许发出任何事务控制语句,如commit、rollback、savepoint或者set transaction,它只能随着外部事务的提交、回滚而提交、回滚。(但在oracle8i 以及更高的版本中,你可以创建作为自治事务而执行的触发器,在这种情况下,触发器可以做提交或回滚操作,而与触发该触发器的外部SQL所在的事务无关)
2。与上面相同,在触发器内调用的所有过程、函数也都不能有事务控制语句,除非它们被声明为自治事务。
3。触发器内,不能声明LONG或LONG RAW变量,并且,:new和ld 也不可以指向触发器所为之定义的表的LONG或者LONG RAW类型的列。
4。在oracle8 及更高版本中,触发器内的代码可以引用和使用LOB类型的列、自定义对象类型的列,但不能修改这些列的值。
5。不允许访问变异表,关于变异表,参考oracle文档