大表資料插入批量提交

thamsyangsw發表於2014-01-23
對大表進行插入時,資料非常多,會把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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章