| 因为数据量比较大,并且是每天重复操作,因此对效率要求较高,请指教,谢谢。
 具体情况如下:
 表A 2000w行左右,字段如下:
 date,A,B,C,D,E
 表B 5000w行左右,字段如下
 date,A,B,C,D,E
 目的:
 将表A的D,E字段更新到B表的D,E,条件是A.A=B.A AND A.B=B.B AND A.C=B.C AND A.DATE与B.DATE最接近的那一项
 eg:
 表A:
 20100818000000,1,2,3,a,b
 20100818010000,1,2,3,c,d
 20100818020000,1,3,4,e,d
 表B:
 20100818001200,1,2,3,,
 20100818003300,1,2,3,,
 20100818021200,1,3,4,,
 最终希望结果如下:
 表B:
 20100818001200,1,2,3,a,b //由于时间最接近表A第一列,相减绝对值最小
 20100818003300,1,2,3,c,d
 20100818021200,1,3,4,e,d
 自己写的一个,效率很第,跑了一天,同时还没将date列考虑进去。
 -----------------------------------------------------------------------------------
 create or replace procedure add_ci_to_sacdr
 as
 cursor c_sacdr is select sgsnip ,chargeid ,msisdn,rowid from nsn_sacdr_tmp2;
 ncount number(5);
 nci number;
 nlac number;
 begin
 ncount:=0;
 for r in c_sacdr loop
 begin
 select ci,lac into nci,nlac from nsn_scdr_tmp2 where sgsnip=r.sgsnip and chargeid=r.chargeid and msisdn=r.msisdn and rownum=1;
 update nsn_sacdr_tmp2 set ci=nci,lac=nlac where rowid=r.rowid;
 ncount:=ncount+1;
 if ncount > 4999 then
 commit;
 ncount:=0;
 end if;
 exception
 when others then
 null;
 end;
 end loop;
 commit;
 end;
 /
 ------------------------------------------------------------
 请问有什么更高效率的方法,请指教,谢谢,最好能给个粗略的脚本哈,本人是初学者。
 
 |