oracle触发器中使用自治事务的问题

momi 2008-06-26 05:47:10
oracle9i
表A上建立了一个触发器,在after update时会执行,在该触发器中有自治事务.
过程如下:
(1)开始事务1
(2)执行一些数据库操作
(3)修改表A中的一条记录
(4) after update时触发器开始执行
(5) 开始自治事务2
(6) 读取表A的记录进行某些操作
(7) 提交自治事务2
(8) 触发器结束执行
(9)执行一些数据库操作
(10)提交事务1

现在出现的问题是在(6)中获取到的表A的记录并不是after update的,而是before update的,而我希望得到的是after update的记录.
请问,我该如何处理?
...全文
503 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
http_rul 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sjbtwo 的回复:]
我现在也有个问题。。
我在A表里面建了一个触发器,修改的时候触发,但是我现在想在这个触发器里面在修改本表的数据的话,就提示发生死锁,不知道怎么解决。。
楼主能否给个意见。。
[/Quote]

能否将你的意图说明白些,即:你的业务逻辑是什么。。都搞不清楚你想干什么怎么回答你的问题呢?
sjbtwo 2008-12-29
  • 打赏
  • 举报
回复
我现在也有个问题。。
我在A表里面建了一个触发器,修改的时候触发,但是我现在想在这个触发器里面在修改本表的数据的话,就提示发生死锁,不知道怎么解决。。
楼主能否给个意见。。
sjbtwo 2008-12-29
  • 打赏
  • 举报
回复
你这儿的自主事物有效果吗。。楼主。。
fourthboy 2008-07-28
  • 打赏
  • 举报
回复
如果A表用触发器:new的方式不能取得值,因为要读的是另一个表的列,不是本表的,要从另一个表B用select方法取出来的记录

而A表触发器事件是由B表触发出来的,这样如何从A表触发器取出B表新的update记录数据?
momi 2008-07-22
  • 打赏
  • 举报
回复
:new.列名当然能够获取到修改的那列的值。
但是问题不在这里。
而是在语句中去select这条记录(同时也select与其相关的记录),得到是修改之前的值,而不是修改之后的值。

目前我的解决办法是select与其相关的记录但不包括修改的那条,再通过:new的方式与刚才select到的记录进行比较,得到结果。

感觉这样处理太麻烦了,在sybase中轻易地就可解决,到oracle里却费这么大的劲。
CathySun118 2008-06-29
  • 打赏
  • 举报
回复
你是如何做的?代码
多壮志 2008-06-28
  • 打赏
  • 举报
回复
楼上已经说清楚了。 :new.col
oracledbalgtu 2008-06-27
  • 打赏
  • 举报
回复
读取update after的数据,需要通过trigger的new.columnName获取。

17,082

社区成员

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

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