请问如下写法怎么不对?
  create or replace trigger update_AA1
before insert or update or delete  on tb_power.AA1
REFERENCING old AS old new AS new
FOR EACH rowbegin
if :new.l_name <> :old.l_name then 
    update AA1
    set L_TYPE = '00000',L_NAME = '11'
    where L_NAME <> :new.L_NAME;
end if;
end ;总提示说:表AA1发生了变化,触发器/函数不能读.

解决方案 »

  1.   

    create or replace trigger update_AA1
    before update on tb_power.AA1
    REFERENCING old AS old new AS new
    FOR EACH rowbegin
        update AA1
        set L_TYPE = '00000',L_NAME = '11'
        where :new.l_name <> :old.l_name ;
    end对新增和删除的那条记录来说,如何区分new和old?
    因此要对insert和delete另写触发器,或在其它表“看过来”。
      

  2.   

    处理变异表的问题.在执行不同的操作而且对表级和行级触发器是不一样的,也就是for each row, 把这句去掉,然后分个调试insert ,update,delete,.针对你的例子,应该是在更新数据的时候表成为变异表,那你把for each row 去掉看看.
      

  3.   

    这位老兄还是不对,提示超过递归(SQL50)级的最大值!
      

  4.   

    触发器中难道真的不能对自己进行UPDATE吗?