各位大哥,我有个表其中有三个触发器 A_INS(插入)、A_DEL(删除)、A_UPD(修改)在A_INS中出现对本表的修改操作,但不能触发A_UPD,怎么办???

解决方案 »

  1.   

    A_INS(插入)执行时本来就不会触发A_UPD(修改)呀,
    不过如果是一个表上有多个触发器,我一般会写
    create or replace trigger ut_accompany_income
    after insert or update or delete on t_accompany_income_byday
    for each row
    declare
      ....
    begin   
        if updating then 
             .....
        elsif inserting then
             ....
        else    --注释,delete
            ......
        end if;  
       
    end;
      

  2.   

    还有可以建立对表中某列的触发器
    例如
    create or replace trigger ut_accompany_income
    after insert or update or delete of ymd on t_accompany_income_byday
    for each row
    .....
    上面的ymd为t_accompany_income_byday的一个字段
      

  3.   

    应楼上兄弟所说:
    create or replace trigger ut_accompany_income
    after insert or update or delete on tableA
    for each row
    declare
      ....
    begin   
        if updating then 
             .....
        elsif inserting then
             ....
             update tableA set fA=vA where .... 这句会再触发updating
             ....
        else    --注释,delete
            ......
        end if;  
       
    end;
    应该不行吧?!
      

  4.   

    在本表的触发器中能够继续对本表执行操作吗?
    最好将update操作写成一个存储过程,
    在触发器中调用该过程,试试看。
      

  5.   

    把你A_UPD所做的操作放在A_INS里UPDATE操作的后面不就得了吗?
      

  6.   

    当然不行啦,A_UPD的操作怎么能放A_INS呢??
    A_UPD中有对:new....也有:old....的操作,怎么能合在一起呢!!
      

  7.   

    :new不就是你UPDATE的新值吗?
    :old你可以在UPDATE之前select出来啊
      

  8.   

    "在A_INS中出现对本表的修改操作,但不能触发A_UPD"就算是行级别前也不能对触发表进行update处理   --肯定是错
    但可以对:new.col_file操作.
    所以你所谓的if inserting then
                 update 触发表 set ....;  --是不可能的
                 :new.col_filed:=....;    --这样操作吧
                elsif updating then
                 ...