触发器,当两张表相互协调数据时,触发器会循环触发_许兴国的空间_百度空间
当两张表相互协调数据时,表1更新表2的数据,而表2又更新表1的数据,这样就会循环触发而报错.解决办法,吧表换成视图,在视图上建立触发器更新表 --创建表一 CREATE TABLE TEST1 ( SID VARCHAR2(10), SNAME VARCHAR2(60) ); --创建表二 CREATE TABLE TEST2 ( SID VARCHAR2(10), SNAME VARCHAR2(60) ); ------------------------------------------------------------------- --基于表创建视图 CREATE OR REPLACE VIEW V_TEST1 AS SELECT * FROM TEST1; CREATE OR REPLACE VIEW V_TEST2 AS SELECT * FROM TEST2; ------------------------------------------------------------------- SELECT * FROM TEST1; SELECT * FROM TEST2; ------------------------------------------------------------------- UPDATE TEST1 SET SNAME = 'this is a good day!' WHERE SID = 'S0001'; UPDATE TEST2 SET SNAME = 'this is a bad day!' WHERE SID = 'S0001'; UPDATE V_TEST1 SET SNAME = 'this is a good day!' WHERE SID = 'S0001'; UPDATE V_TEST2 SET SNAME = 'this is a bad day!' WHERE SID = 'S0001'; ------------------------------------------------------------------- --创建触发器 CREATE OR REPLACE TRIGGER UPDATE_TEST2 INSTEAD OF UPDATE OR INSERT ON V_TEST1 --注意这里是 INSTEAD OF 而不是 after or befor FOR EACH ROW DECLARE BEGIN UPDATE TEST2 SET SNAME = :NEW.SNAME WHERE SID = :OLD.SID; END; ------------------------------------------------------------------- CREATE OR REPLACE TRIGGER UPDATE_TEST1 INSTEAD OF UPDATE OR INSERT ON V_TEST2 FOR EACH ROW DECLARE BEGIN UPDATE TEST1 SET SNAME = :NEW.SNAME WHERE SID = :OLD.SID; END; ------------------------------------------------------------------- drop trigger UPDATE_TEST2; drop trigger UPDATE_TEST1; ------------------------------------------------------------------- it's so easy ,yea!


郑重声明:资讯 【触发器,当两张表相互协调数据时,触发器会循环触发_许兴国的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——