……天天向上

          好的想法總是無(wú)窮無(wú)盡

          統(tǒng)計(jì)

          留言簿(1)

          閱讀排行榜

          評(píng)論排行榜

          ORACLE復(fù)制千萬(wàn)級(jí)數(shù)據(jù)表時(shí)用的存儲(chǔ)過(guò)程

          CREATE OR REPLACE PROCEDURE "LARGEDATA_INSERT" (ip_table_name   in varchar2, --目標(biāo)表
                                                    ip_table_column in varchar2, --目標(biāo)字段
                                                    ip_table_select in varchar2, --SELECT 查詢(xún)語(yǔ)句
                                                    return_result   out number --返回的結(jié)果1,表示成功,0表示失敗
                                                    ) as
          --適合大數(shù)據(jù)量的插入模板  create Templates by chenzhoumin 20110614
            runTime number;--運(yùn)行總次數(shù)
            i       number;--當(dāng)前行數(shù)
            amount  number;--總行數(shù)
            s_sql   varchar2(10000);--SQL語(yǔ)句
            e_sql   varchar2(10000);--執(zhí)行SQL語(yǔ)句
            countNumber number;--一次插入的數(shù)據(jù)量
          begin
            --set serveroutput on size 20000000000000
            countNumber := 10000;
            return_result := 0; --開(kāi)始初始化為0
            --核必邏輯內(nèi)容,可根據(jù)具體的業(yè)務(wù)邏輯來(lái)定義,統(tǒng)計(jì)數(shù)據(jù)總行數(shù)
            s_sql := 'select count(1) from (' || ip_table_select || ')';
            execute immediate s_sql
              into amount;
            --每100萬(wàn)提交一次
            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('結(jié)束');
              return;
          end;



          以上測(cè)試通過(guò)。

          posted on 2012-07-09 15:06 japper 閱讀(1971) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Oracle

          主站蜘蛛池模板: 宁陵县| 顺昌县| 孟津县| 南澳县| 桐城市| 石屏县| 屏山县| 镇原县| 民丰县| 蕲春县| 太白县| 大荔县| 息烽县| 凤冈县| 咸阳市| 盐津县| 台山市| 长沙县| 龙里县| 泗水县| 象山县| 静海县| 浮山县| 布尔津县| 宽甸| 咸宁市| 黑山县| 新竹县| 汕头市| 繁昌县| 石景山区| 富民县| 大名县| 汉川市| 洛川县| 乳源| 五大连池市| 海林市| 大竹县| 开江县| 子长县|