大佬教程收集整理的这篇文章主要介绍了oracle存储过程大数据量insert,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对于大数据量的insert into SELEct的做法,我个人来说不赞成这样做,现实也没这样做,对此,我通过Oracle的存储过程写了个大数据量的insert into SELEct 的分批插入方法,代码如下
create or replace procedure largedata_insert(ip_table_name in varchar2,--目标表 ip_table_column in varchar2,--目标字段 ip_table_SELEct in varchar2,--Select 查询语句 return_result out number --返回的结果1,表示成功,0表示失败 ) as --适合大数据量的插入模板 create Templates by chenzhoumin 20110614 runTime number; i number; amount number; s_sql varchar2(5000); begin return_result := 0; --开始初始化为0 --核必逻辑内容,可根据具体的业务逻辑来定义 s_sql := 'SELEct count(1) from (' || ip_table_SELEct || ')'; execute immediate s_sql into amount; --每100万提交一次 runTime := amount mod 1000000; if (runTime > 0) then runTime := 1 + trunc(amount / 1000000); end if; if (runTime = 0) then runTime := 0 + trunc(amount / 1000000); end if; FOR i IN 1 .. runTime LOOP execute immediate 'insert into ' || ip_table_name || ' (' || ip_table_column || ') SELEct ' || ip_table_column || ' from @R_696_9579@ct SELEctSec.*,rownum rownumType from (' || ip_table_SELEct || ') SELEctSec WHERE ROWNUM <= ' || i * 1000000 || ') WHERE rownumType > ' || (i - 1) * 1000000; --提交 commit; END LOOP; return_result := 1; DBMS_output.put_line('结束' || TO_CHAR(sysdate,'yyyymmddhh24miss')); return; exception when others then return_result := 0; raise; return; end;
以上代码的意思是每100W就向数据库提交一次
转载请标明出处http://writeblog.csdn.net/PostEdit.aspx?entryID=6544640
以上是大佬教程为你收集整理的oracle存储过程大数据量insert全部内容,希望文章能够帮你解决oracle存储过程大数据量insert所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。