难!!!触发器中能回滚部分事务吗?

来源:百度知道 编辑:UC知道 时间:2024/05/21 06:57:15
我在A表定义了一个Insert触发器,要求如下:
如果有数据插入A表,解析插入的纪录,然后依次更新B表、C表、D表(总之逻辑比较复杂)
我定义了一个事务,如果更新B表、C表、D表时有一处出错,就在Catch 语句中回滚事务

不幸的是:插入A表的那条纪录也被 Rollback了,而我需要保留这条数据!

请高人指点!谢谢先

PS:我调查过,触发器为一隐式事务,那么说如果我要保留A表插入的数据就不能使用 Rollback了吗?不使用的话我又如何保证B、C、D表的同时提交?
还是不可以,提示错误:
事务在触发器中结束。批处理已中止。

大家看看还有什么方法可行

可以,你用显式事务。
你先设置set implicit_transactions off
然后在插完A表后用begin transaction
这样你回滚的时候就从begin开始的了。

不做触发器,做一个存储过程,把要更新的语句放进事务处理中。对于表A的触发器,当产生错误时,当然会放弃对自己的更新。

这个到没注意过,你可以用触发器激活存储过程,存储过程内写一个显示事务

oracle可以作到保存点回滚,即回滚到保存点位置的时候。
sql的事务是一个整体逻辑块,据我掌握的知识,不能定点回滚。