我本来想改变一张表(A)内容之后,通过触发器改变另一张表(B)的内容,在这过程中要查询触发器触发的那张表(A),这过程中会出现错误:A表已有修改,不能读取/访问。所以我用了自治事务,用了之后,之前的错误没有了,但是却引发了另一个问题,就是第一次在A表做update时,B表没有变化,触发器已经执行,第二次执行同样语句的时候,B表才发生了变化,为什么?请高手解答,急。

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER trigger_update_bxx AFTER UPDATE ON ins_area_bxx   
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROWDECLARE 
        PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
        pck_area_builder.update_node(:old.area_id);
        COMMIT;
    END trigger_update_bxx;
      

  2.   

    测试UPDATE的候,有没有commit?
      

  3.   

    不管怎么样
    你的触发器中怎么会有commit啊
    这好像不对吧?
      

  4.   

    这个是自治事务的触发器,里面的commit是指的trigger,只是终结自己的事务。但从楼主的描述来看,是 不应该出现问题的。即使update里没有commit,b表也会commit更新的。
      

  5.   

    pck_area_builder.update_node(:old.area_id);你这个package中去读表A,实际是从回滚段中读取的,所以读的是A表update之前的数据