千W级别的插入操作(转)

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(10000);--SQL语句
  e_sql   varchar2(10000);--执行SQL语句
  countNumber number;--一次插入的数据量
begin
  --set serveroutput on size 20000000000000
  countNumber := 10000;
  return_result := 0; --开始初始化为0
  --核必逻辑内容,可根据具体的业务逻辑来定义,统计数据总行数
  s_sql := 'select count(1) from (' || ip_table_select || ')';
  execute immediate s_sql
    into amount;
  --每100万提交一次
  runTime := amount mod countNumber;
  if (runTime > 0) then
    runTime := 1 + trunc(amount / countNumber);
  end if;
  if (runTime = 0) then
    runTime := 0 + trunc(amount / countNumber);
  end if;
  FOR i IN 1 .. runTime LOOP
    e_sql := 'insert into '||ip_table_name ||'
    ('||ip_table_column ||')
     select '|| ip_table_column ||'
     from
     (select selectSec.*, rownum rownumType
          from ('|| ip_table_select ||') selectSec
         WHERE ROWNUM <= '|| i * countNumber ||')
    WHERE rownumType > '||(i - 1) * countNumber;
    dbms_output.enable(99999999999999);
    dbms_output.put_line(e_sql);
    execute immediate e_sql;
    --提交
    commit;
  END LOOP;
  return_result := 1;
  return;
exception
  when others then
    return_result := 0;
    raise;
    dbms_output.enable(99999999999999);
    dbms_output.put_line('结束');
    return;
end;

posted on 2013-06-15 17:03 snowhill 阅读(98) 评论(0)  编辑 收藏 引用 所属分类: 数据库-oracle


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

公告

又一年...........

留言簿(3)

随笔分类(13)

文章分类(131)

文章档案(124)

c++

java

linux

oracle

常用软件

其他

网络配置

系统安全

音乐

搜索

最新评论

阅读排行榜