oracle 触发器与事务

触发器与事务管理

(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文档

Oracle 数据库中,触发器事务是构建可靠、高效数据处理流程的关键组件,触发器能够自动响应特定数据库事件执行预设操作,而事务则确保一组数据库操作的原子性、一致性、隔离性和持久性 [^1]。 ### 提交方法和原理 在 Oracle 触发器中,若要在触发器触发期间提交事务,可使用自治事务。自治事务允许在触发器触发时独立于外部事务进行提交操作,不管插入数据的事务是否成功。例如,在一个 `before insert` 触发器中使用自治事务的示例代码如下: ```sql create or replace trigger TRI_add before insert on b for each row declare PRAGMA autonomous_transaction; begin update b set b.RANk=b.RANk+1 where b.RANk>:new.RANk or b.RANk=:new.RANk ; commit; end TRI_add; ``` 在上述代码中,`PRAGMA autonomous_transaction;` 声明了该触发器使用自治事务,在触发器执行 `update` 操作后,使用 `commit` 语句提交事务 [^2]。 ### 回滚方法和原理 结束一个自治事务必须提交一个 `commit`、`rollback` 或执行 `ddl`,否则会产生 Oracle 错误 `ORA - 06519: active autonomous transaction detected and rolled back`。若要回滚事务,可在触发器中使用 `rollback` 语句。例如,在自治事务中,若发生异常情况需要回滚操作,可以在异常处理部分添加 `rollback` 语句: ```sql create or replace trigger TRI_add before insert on b for each row declare PRAGMA autonomous_transaction; begin update b set b.RANk=b.RANk+1 where b.RANk>:new.RANk or b.RANk=:new.RANk ; -- 模拟异常 if some_condition then rollback; return; end if; commit; end TRI_add; ``` 在上述代码中,当满足 `some_condition` 条件时,使用 `rollback` 语句回滚事务 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值