日期:2014-05-17  浏览次数:21399 次

触发器执行失败后的处理问题
我用触发器达到两个数据库这间的数据同步.用到DBLink;本地Oracle1,远程Oracle2
我向Orcale1.Table1输入数据,Table1有触发器,正常情况下Orcale2.table1也会有输入同样的数据.
问题:Orcale1与Orcale2的网线断了,Orcale1连接不上Orcale2
          当Orcale.table1输入数据时,由于触发器执行失败,结果Orcale1.table1和Orcale2.table1都没有输入成功数据.
我要的结果:
        Orcale1.table1能成功输入数据.Oracle2.table1连不上就算了.
这个触发器怎么写才能处理失败后还能成功输入Oracle1.table1.

------解决方案--------------------
将触发器声明为自治事务,则只管理自身事务,不会影响触发他的语句。Oracle 8以前没有这东东

CREATE TRIGGER parts_trigger
BEFORE INSERT ON parts FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION; --将触发器声明为自治事务
BEGIN
INSERT INTO parts_log VALUES(:new.pnum, :new.pname);
COMMIT; -- allowed only in autonomous triggers
END;
------解决方案--------------------
用个AFTER 不行吗?