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.