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

求助,要同步两个表记录的脚本
本人初玩ORACLE只会简单的SELECT INSERT
今天要做一个同步的脚本求助各位高手

有三个表 T1 T2 T3 字段一样,结构相同
T1,T2已有记录,T3是空表
要求:用T1的记录INSERT到T2 如果T2没有这条记录就直接插入,如果T2已经有这条记录,就先把T2的记录INSERT到T3,然后删除T2的这条记录,再用T1的记录INSERT到T2。  T1记录的条数大约有100W 请各位大神帮忙啊。。
脚本 Oracle Structure select

------解决方案--------------------
create or replace procedure test
 as
 cursor var_c1 is select * from A1;
 cursor var_c2 is select * from A2;
begin
 for temp1 in var_c1 loop
   for temp2 in var_c2 loop
       if temp1.aid = temp2.aid then
       insert into A3(aid,aname,age) values(temp2.aid,temp2.aname,temp2.age);
       delete A2 a2 where a2.aid = temp2.aid;
       insert into A2(aid,aname,age) values(temp1.aid,temp1.aname,temp1.age);
       end if;
   end loop;
 end loop;
end;

不知道是不是你想要的
------解决方案--------------------
个人感觉用SQL语句完成比较简单,首先把T1、T2重复的插入到T3中,
INSERT INTO t3(id,column1,column2) SELECT t2.id,t2.coulmn1,t2.coulmn2 FROM t2,t1 WHERE t2.id=t1.id

之后就有两种情况,如果t1与t2重复记录较多,那就根据t1更新t2,否则就把重复的给删掉,然后t1全部插入t2.代码分别是:
UPDATE t2 SET(id,column1,column2)=(SELECT t2.id,t2.coulmn1,t2.coulmn2 FROM t2,t1 WHERE t2.id=t1.id);

DELETE t2 WHERE exists(SELECT 1 FROM t1 WHERE t1.id=t2.id)

最后就是插入了,如果第二步是删除,那就简单了
INSERT INTO t2(id,column1,column2) SELECT t2.id,t2.coulmn1,t2.coulmn2 FROM t1

如果第二步是更新,那也简单
INSERT INTO t2(id,column1,column2) SELECT t2.id,t2.coulmn1,t2.coulmn2 FROM t1  WHERE not exists(SELECT 1 FROM t1 WHERE t1.id=t2.id)