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的记录.
请问,我该如何处理?

解决方案 »

  1.   

    读取update after的数据,需要通过trigger的new.columnName获取。
      

  2.   

    楼上已经说清楚了。 :new.col 
      

  3.   

    :new.列名当然能够获取到修改的那列的值。
    但是问题不在这里。
    而是在语句中去select这条记录(同时也select与其相关的记录),得到是修改之前的值,而不是修改之后的值。目前我的解决办法是select与其相关的记录但不包括修改的那条,再通过:new的方式与刚才select到的记录进行比较,得到结果。感觉这样处理太麻烦了,在sybase中轻易地就可解决,到oracle里却费这么大的劲。
      

  4.   

    如果A表用触发器:new的方式不能取得值,因为要读的是另一个表的列,不是本表的,要从另一个表B用select方法取出来的记录而A表触发器事件是由B表触发出来的,这样如何从A表触发器取出B表新的update记录数据?