使用触发器,目标表数据记录正常被触发器添加了,源表数据记录反而没添加成功.但不是每次都发生,目前使用发现,1万个执行结果,大约120个左右出现上述问题,很郁闷,不知为什么.

解决方案 »

  1.   

    你的源表和目标表指的分别是什么,把你的trigger贴上来看看。
      

  2.   

    啊? 你的触发器怎么写的?另外,alert中有什么错误没?
      

  3.   

    create or replace trigger ELEC508_TRIGGER
      after insert or update or delete on elec508
    for each row
    declare
      -- local variables herebegin
         case
         when inserting then          INSERT INTO elec396 values(elec396_sequence.nextval,:new.nsrsbh,:new.sssq,:new.qsrq,:new.jzrq,:new.tbrq,:new.a39,:new.a31,:new.a40,:new.a41,:new.a42,:new.a43,:new.a3,:new.a4,:new.a5,:new.a8+:new.a9+:new.a32,:new.a11,:new.a12,:new.a14,:new.a17,:new.a15,:new.a22+:new.a23+:new.a24,:new.a25,:new.a26,:new.a13,:new.a30,:new.a18 );     when updating THEN            update elec396 set a1=:new.a39,a2=:new.a31,a3=:new.a40,a4=:new.a41,a5=:new.a42,a6=:new.a43,a7=:new.a3,a8=:new.a4,a9=:new.a5,a10=:new.a8+:new.a9+:new.a32,a11=:new.a11,a12=:new.a12,a13=:new.a14,a14=:new.a17,a15=:new.a15,a16=:new.a22+:new.a23+:new.a24,a17=:new.a25,a18=:new.a26,a19=:new.a13,a20=:new.a30,a21=:new.a18 where (nsrsbh=:old.nsrsbh) and (sssq=:old.sssq) ;    when deleting THEN            delete from  elec396 where (nsrsbh=:old.nsrsbh) and (sssq=:old.sssq);
          end case;
    end;这是触发器代码,主要是在ELEC508表在添加时,触发根据该表的一些值计算后添加入elec396 
    但是,竟然会出现elec396 数据添加成功,而源表ELEC508的纪录没有添加成功!
      

  4.   

    按道理说ORACLE处理触发器还是比较成熟的啊。怎么也会有这种问题?
    想知道你程序是怎么写的,是不是把这个触发器写在一个大事务里面?如果还有后面的步骤执行不成功从而导致insert回滚的话,触发器是不会回滚的。