zy8643954 发表于 2013-2-5 02:42:38

pl/sql batch update

组里有同事说有一个需要大批量跟新数据库中的功能,批量修改50万数据很慢,于是我改造了一下她的代码,从打开游标的单条修改,改成了批量修改。性能得到了满足。

function F_updatebankdata(    i_Bankbatchs          IN          T_bankdatacollect.Bankbatchs%type, --批次号    o_returnstr         out         varchar2)return number--0成功1失败is       type detailid_tab is table of varchar2(20);       type bankcode_tab is table of varchar2(3);       type bankaccount_tab is table of varchar2(50);       type bankno_tab is table of varchar2(2);            detailids                           detailid_tab;       bankcodes                           bankcode_tab;       bankaccounts                        bankaccount_tab;       banknos                           bankno_tab;      cursor c_T_bankdatadetail is         select b.Bankdatadetailid,b.bankcode,b.bankaccount,b.bankno         from T_bankdatadetail b          where b.bankbatchs = i_Bankbatchs;begin    l_effrow := 0;    open c_T_bankdatadetail;      loop          fetch c_T_bankdatadetail         bulk collect into detailids,bankcodes,bankaccounts,banknoslimit 10000;          exit when detailids.count() = 0;               l_effrow := l_effrow + detailids.count();               forall i in detailids.first .. detailids.last                      update T_bankcyclebills a                         seta.bankdatadetailid = detailids(i)                     wherea.bankbatchs = i_Bankbatchs                         anda.bankcode = bankcodes(i)                         anda.bankaccount = bankaccounts(i)                         anda.bankno = banknos(i);                  commit;             end loop;   close c_T_bankdatadetail;    return 0;exception   when others then       return 1;end;
页: [1]
查看完整版本: pl/sql batch update