对大表进行插入时,数据非常多,会把undo表空间撑爆,导致插入不成功,可以使用批量提交进行插入,及时释放回滚段
declare
--定义cursor把数据全部读入内存中
cursor cur is
select nsrzhdah, sfzjlx_dm, sfzjhm, xm, nsrsbh,
zlsfqq, lydm, yxbz, bdbz, hcode,
fkid , fxbz, zrrlx_dm , xybz , lrrq ,
lrr_dm, xgrq , xgr_dm , nsrswjg_dm,wspzxh ,
ywxh , bdlx_dm , czlx_dm , sjlyxt , sjjzrq ,
sjscrq , sjbgbz , sjtjrq , sjgsdq
from j1_g3_zbq.INFT02_JBXX_ZRR;
--自定义集合类型
type rec is table of cur%rowtype;
recs rec;
begin
execute immediate 'alter table j1_ldm.ldmt02_jbxx_zrr nologging';
open cur;
while (true) loop
fetch cur bulk collect
into recs limit 10000;--10000行执行一次游标读取操作
--把数据逐条插入
forall i in 1 .. recs.count
insert into j1_ldm.ldmt02_jbxx_zrr values recs (i);
commit;
exit when cur%notfound;
end loop;
close cur;
execute immediate 'alter table j1_ldm.ldmt02_jbxx_zrr logging';
end;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26613085/viewspace-1074658/,如需转载,请注明出处,否则将追究法律责任。