oracle存储过程大数据量insert

本文介绍了一种使用Oracle存储过程实现的大数据量分批插入方法,该方法每100万条记录提交一次,以减少大数据量插入时对数据库的压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于大数据量的insert into select的做法,我个人来说不赞成这样做,现实也没这样做,对此,我通过oracle的存储过程写了个大数据量的insert into select 的分批插入方法,代码如下

  1. createorreplaceprocedurelargedata_insert(ip_table_nameinvarchar2,--目标表
  2. ip_table_columninvarchar2,--目标字段
  3. ip_table_selectinvarchar2,--SELECT查询语句
  4. return_resultoutnumber--返回的结果1,表示成功,0表示失败
  5. )as
  6. --适合大数据量的插入模板createTemplatesbychenzhoumin20110614
  7. runTimenumber;
  8. inumber;
  9. amountnumber;
  10. s_sqlvarchar2(5000);
  11. begin
  12. return_result:=0;--开始初始化为0
  13. --核必逻辑内容,可根据具体的业务逻辑来定义
  14. s_sql:='selectcount(1)from('||ip_table_select||')';
  15. executeimmediates_sql
  16. intoamount;
  17. --每100万提交一次
  18. runTime:=amountmod1000000;
  19. if(runTime>0)then
  20. runTime:=1+trunc(amount/1000000);
  21. endif;
  22. if(runTime=0)then
  23. runTime:=0+trunc(amount/1000000);
  24. endif;
  25. FORiIN1..runTimeLOOP
  26. executeimmediate'insertinto'||ip_table_name||'('||
  27. ip_table_column||')
  28. select'||ip_table_column||'from(selectselectSec.*,rownumrownumType
  29. from('||ip_table_select||
  30. ')selectSec
  31. WHEREROWNUM<='||i*1000000||')
  32. WHERErownumType>'||(i-1)*1000000;
  33. --提交
  34. commit;
  35. ENDLOOP;
  36. return_result:=1;
  37. dbms_output.put_line('结束'||to_char(sysdate,'yyyymmddhh24miss'));
  38. return;
  39. exception
  40. whenothersthen
  41. return_result:=0;
  42. raise;
  43. return;
  44. end;

以上代码的意思是每100W就向数据库提交一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值