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,banknos limit 10000;
exit when detailids.count() = 0;
l_effrow := l_effrow + detailids.count();
forall i in detailids.first .. detailids.last
update T_bankcyclebills a
set a.bankdatadetailid = detailids(i)
where a.bankbatchs = i_Bankbatchs
and a.bankcode = bankcodes(i)
and a.bankaccount = bankaccounts(i)
and a.bankno = banknos(i);
commit;
end loop;
close c_T_bankdatadetail;
return 0;
exception
when others then
return 1;
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值