LoveUnix » ORACLE等数据库 » 触发器与事务的问题请教
让LU留住您的每

一天 让LU博客留住您的每一天
2007-4-25 17:01 tyffly
触发器与事务的问题请教

我建立了一个insert触发器
现在有语句begin work;
               insert table在还没有commit的情况下就触发了触发器的动作,请问一下有没有等commit好后触发我的这个触发器动作啊?谢谢

2007-4-25 19:12 statistics
你要做什么?

2007-4-25 22:09 rwq_
不知你为什么要这么做?

2007-4-26 08:36 tyffly
做什么?我有这个要求啊,就是数据一插入就触发一个动作,后来才发现没有commit也触发,这就不符全我的要求了,所以才能上面的说法.

2007-4-26 09:15 tyffly
就是我有这样一个要求,begin work;做一些动作1;符合条件就insert表;再一些动作2;commit work
就是有可能在动作2的时候出错,那么就回滚了,但是上面的insert已经发生了,就触发了触发器的操作
但是实际情况是回滚了,没有实际成功,这些顺序不能变更,而且出错的时候必须回滚,请问一下有什么好的方法,让commit成功后再触发我的触发器动作.

2007-4-26 13:02 rwq_
在触发器里面你可以COMMIT事务,太牛了吧。OK,我问你一下,如果你COMMIT成功后,再来触发操作,如果这个操作失败你又能咋办.

实际上,当你的触发器遇到失败的时候,你的整个事务都会回滚的。

2007-4-26 14:17 statistics
逻辑判断放在应用层啊,
或者写procedure。

2007-4-26 14:37 statistics
trigger最好在与数据库特性相关的时候,比如一个用户登录,你要做审计,记录时间,ip。
用户的在某个表空间的使用达到quota后的处理方式,等等。
或者是在测量应用对数据库的影响,比如生成的redo,undo等。

如果想把男员工记录插入表,而女员工记录不插入这个表,那么你要在应用层判断好。

commit和rollback表示的是一个用户会话的一致状态。
"逻辑"上表示数据“被”写入数据文件了。

2007-4-26 16:42 tyffly
晕,难道我表达不清楚啊,居然没有人明白我说的意思,哎
看来这里也没有几个用过触发器这类操作,插表的动作当然要用事务啊,并不是说我在触发器里面用事务,插表的动作肯定是放在应用层的,就是应用层有时候碰到异常情况会rollback掉,但是rollback在插表之后,但是已经触发了触发器的动作,这是我不想看到的事情,我是想在数据真正成功commit后再触发,这是Informix的机制问题,我只是想想有没有变通的方法来解决而已

2007-4-26 18:08 rwq_
晕,你的是INFORMIX DB?

2007-4-27 08:48 tyffly
是的,不好意思,居然把这个这么喝重要的消息忘了跟大家说了
有什么变通的方法吗?

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.