create or replace trigger njjjhb 
before update,insert,delete on njjjhb 
for each row 
begin 
     if updating then
     update njjjhb set 
     xmztz=xmztz-:old.xmztz+:new.xmztz 
     snljwc=snljwc-:old.snljwc+:new.snljwc 
     snjz=snjz-:old.snjz+:new.snjz 
     snjzzj=snjzzj-:old.snjzzj+:new.snjzzj 
     bnxz=bnxz-:old.bnxz+:new.bnxz 
     bnwc=bnwc-:old.bnwc+:new.bnwc 
     where pk=:new.parent; 
     esleif deleting then
     update njjjhb set 
     xmztz=xmztz-:old.xmztz 
     snljwc=snljwc-:old.snljwc 
     snjz=snjz-:old.snjz 
     snjzzj=snjzzj-:old.snjzzj 
     bnxz=bnxz-:old.bnxz 
     bnwc=bnwc-:old.bnwc 
     where pk=:new.parent; 
     else inserting
     update njjjhb set 
     xmztz=xmztz+:new.xmztz 
     snljwc=snljwc+:new.snljwc 
     snjz=snjz+:new.snjz 
     snjzzj=snjzzj+:new.snjzzj 
     bnxz=bnxz+:new.bnxz 
     bnwc=bnwc+:new.bnwc 
     where pk=:new.parent; 
     end if
end;

解决方案 »

  1.   

    所有触发器都同一错误,不能对触发表进行修改或访问
    update njjjhb set ....  --对触发表进行修改产生错误
      

  2.   

    同意beckhambobo(beckham),改用存储过程实现
      

  3.   

    armu80830(此情可待) :能否帮我写一下,感激不尽!!!!急!!!!分还可在加!!!!!
      

  4.   

    before insert on njjjhb 
    for each row 
    再对表njjjhb进行update njjjhb set当然是不行。
      

  5.   

    你使用的是行触发器,触发器的表是变异表,所以select insert update delete 都是不行的。可以使用语句触发器和行触发器结合的方式。
      

  6.   

    知道什么是死循环 ?你这里也是死循环 你可以看看触发器的一些限制条件 其中一条是不能在多这个表做update delete insert 操作
      

  7.   

    这样吧,建对应视图,做一视图的触发器:
    create view v_njjjhb as select * from njjjhb;create or replace trigger njjjhb_01 
    INSTEAD OF insert on v_njjjhb 
    begin 
         update njjjhb set 
         xmztz=xmztz+:new.xmztz 
         snljwc=snljwc+:new.snljwc 
         snjz=snjz+:new.snjz 
         snjzzj=snjzzj+:new.snjzzj 
         bnxz=bnxz+:new.bnxz 
         bnwc=bnwc+:new.bnwc 
         where pk=:new.parent; 
    end; 
    其它也相应修改,以后所有插入就对v_njjjhb进行