各位大侠好,小弟现在需要做一个触发器,当表A里面有数据更新的时候,就将更新的数据备份到表B中,A B两张表的结构完全一样,请大侠指点下如何判断比较有效率:
A
column        PrimaryKey       Type      Null
ReelID        No               Varchar   Yes
McID          Yes              number
Station       Yes              number
Slot          Yes              number
SubSlot       Yes              number
PickListID    Yes              Varchar
ReelCounter   Yes              number
CompName      No               varchar   Yes
Timestamp     No               Date      Yes我是想在更新的时候判断新插入的数据的主键在B表中存在与否,然后决定是否插入,但是如果B表数据越来越多,这个效率不高,所以想请大家给个好点的思路,谢谢

解决方案 »

  1.   

    如果要是实现同步功能的话,可以使用物化视图啊
    或者手工使用merge语句定时同步
      

  2.   

    你的意思是,当A表同一主键的记录,第一次被更新时,触发器插入B表相应数据。
    那么下次该记录再次被更新,此时,相同主键的记录在B表里已经存在,难道你不记录这次更新了?
      

  3.   

    如果随后的不记录,那么用merge into判断。如果主键记录已存在,则收工;如果不存在,则insert into B。
      

  4.   

    没测试  看看这样是不是满足要求
    create trigger upd_Bafter insert or update or delete
    on A
    begin 
    merge into b using(:new.ReelID,:new.McID,:new.Station,:new.Slot,:new.SubSlot,:new.PickListID,:new.ReelCounter ,:new.CompName,:new.Timestamp) on (:new.McID=b.McID,:new.Station=b.Station,:new.Slot=b.Slot,:new.SubSlot=b.SubSlot,:new.PickListID=b.PickListID,:new.ReelCounter =b.ReelCounter)
    when matched then update .....
    when not matched then insert
    ....
      

  5.   

    恩,merge into是可以的,就是效率有点低,我已经用:new :old解决问题了。谢谢大家的帮忙。