写了一条触发器,有数据跟新以及有数据插入的时候触发以前写了,后来想想有问题,因为我是根据触发的数据进行处理并跟新这些数据跟新这些数据以后又跟新到该表中,再次触发了,就陷入了死循环于是乎我就加了一个条件 :old.a=:new.a的时候才触发,也就是说原数据的不是a列改变才执行下面的修改,如果a列改变则不执行下面的修改语句但是现在好像插入数据,却不执行了求教该如何解决?

解决方案 »

  1.   

    你分别写两个触发器撒,一个insert触发器,一个update触发器,你update触发器的时候再根据条件更新:old.a=:new.a
      

  2.   

    create or replace trigger trg_i_u
    before insert or update on table_name
    when (:old.a is null or :new.a=:old.a)
    is
    ....
    ....
      

  3.   

    看了看不知道你是不是因为new和old不清楚导致的出的问题:
    当insert的时候:old是空值,new是插入的新值
    当update的时候:old是表中的旧值,new是打算更新的值
    这大概就是你insert的时候不执行的缘故我觉得11楼的答案是对的。
    我也是菜鸟,如果有不对的地方请大家指教
      

  4.   

    NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。