ORACLE触发器中rollback后有没有方法往别表插入数据

cool910 2008-12-08 04:16:13
我自定义了一个异常,发生异后希望执行回滚,但回滚后又要向另外一张表中插数据。代码如下,有没有方法使现?
IF V_TAG=0 THEN
RAISE e_no_employee;
END IF;

EXCEPTION
WHEN e_no_employee THEN
rollback;--下句insert不执行
insert into TS_CAPTION (TS_NUMBER ,Caption ) values (:new.TS_NUMBER,'请先填写合同信息');
WHEN OTHERS THEN
NULL;
...全文
211 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cool910 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whqcfp 的回复:]
首先要说明一下:

在触发器中,他和触发他的事务是同一下事务,如果触发器抛出异常,则整个事务回滚。

如果你捕获了该异常,则不影响整个事务的执行的。

如下所示:


IF V_TAG=0 THEN
RAISE e_no_employee;
END IF;

EXCEPTION
WHEN e_no_employee THEN
insert into TS_CAPTION (TS_NUMBER ,Caption ) values (:new.TS_NUMBER,'请先填写合同信息');

[/Quote]

这样的话就不能回滚了,我想做的是回滚后再更新本表数据,不知道行不行
whqcfp 2008-12-12
  • 打赏
  • 举报
回复
首先要说明一下:

在触发器中,他和触发他的事务是同一下事务,如果触发器抛出异常,则整个事务回滚。

如果你捕获了该异常,则不影响整个事务的执行的。

如下所示:


IF V_TAG=0 THEN
RAISE e_no_employee;
END IF;

EXCEPTION
WHEN e_no_employee THEN
insert into TS_CAPTION (TS_NUMBER ,Caption ) values (:new.TS_NUMBER,'请先填写合同信息');
WHEN OTHERS THEN
NULL;
cool910 2008-12-12
  • 打赏
  • 举报
回复
触发器里不能使用commit

我使用了自治事务能向别表插入数据,但又出现了一个问题,不能修改本表数据,产生死锁
codearts 2008-12-08
  • 打赏
  • 举报
回复
否则的话,insert语句应该能执行,但之后你要commit;
sleepzzzzz 2008-12-08
  • 打赏
  • 举报
回复
trigger里想控制transaction,采用自治事务.
codearts 2008-12-08
  • 打赏
  • 举报
回复
触发器里是不能commit或rollback的

17,138

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧