declare
i number(16);
x number(16);
cur_date varchar(16);
pre_date varchar(16);
sql_str varchar(512);
begin
for x in 7..9 loop
pre_date:='201502'||to_char(x,'fm00')||'000000';
for i in 0 .. 23 loop
cur_date := '201502'||to_char(x,'fm00')||rpad(lpad(to_char(i), 2,
'0'),6,'0') ;
sql_str:='insert into xl_area_cycle_201502' ||to_char(x,'fm00') ||
' select '''||cur_date||''',MSISDN,IMSI,IMEI,LAC_CELL from
xl_area_cycle_201502' ||to_char(x,'fm00')||' a
'||
'where a.info_time='''||pre_date||''' and not
exists (select 1 from xl_area_cycle_201502'||to_char(x,'fm00') ||'
b where a.imsi=b.imsi and
b.info_time='''||
cur_date||''') and exists (select 1 from
xl_area_cycle_201502'||to_char(x,'fm00')||' c
where a.imsi=c.imsi and
c.info_time>'''||cur_date||''')';
pre_date:=cur_date;
execute immediate sql_str;
commit;
end loop;
end loop;
end;
/
to_char(x,'fm00')是为了将x转为字符串,00是为了不够两位数的时候前面补零,fm是为了去除前面的空格。to_char(x,'fm00')也可以用trim(to_char(x,'00'))代替。
xl_area_cycle_201502'||to_char(x,'fm00')||'
是组合表名