ITPub博客

首页 > 数据库 > Oracle > oracle 抽取过程

oracle 抽取过程

原创 Oracle 作者:gh_95533 时间:2015-07-16 16:12:31 0 删除 编辑

确定表含义,字段含义,字典表,和他表是否有关联关系

确定对方数据总量,每日//月增长量

确定对方时间戳(递增序列戳)

小知识1:抽取对方1000~2000条数据将其存入新建的txt中,查看所占空间大小,通过等比约估表所占空间大小

小知识2:抽取对方数据时,走索引的不要修改索引列的字段类型

小知识3:第一次抽取历史大数据时,可以不建立目标表索引,以提高抽取速度

 

oracle抽取过程模板


这是依照上图写的抽取过程

PROCEDURE DR_ZYK_ZLGX(PK VARCHAR2, GXLX VARCHAR2) IS

    V_SYSDATE DATE;

    V_PK      VARCHAR2(100);

    V_GXLX    VARCHAR2(100);

    V_COUNT   NUMBER;

    V_ZXZT    VARCHAR2(10);

    V_MAXSJC  DATE;

    V_SJC     DATE;

    V_INSSQL  VARCHAR2(4000);

    V_YSB     VARCHAR2(100);

    V_MBB     VARCHAR2(100);

    V_ERR     VARCHAR2(200);

  BEGIN

    --首先判断增量类型

    V_PK   := PK;

    V_GXLX := GXLX;

    --从表中获取填写内容是否有问题

    SELECT SYSDATE INTO V_SYSDATE FROM DUAL;

    SELECT COUNT(1)

      INTO V_COUNT

      FROM T_LOG_CZGC_SJC T

     WHERE T.PK_VALUE = V_PK

       AND T.GXLX = V_GXLX;

    SELECT T.YSB, T.MBB

      INTO V_YSB, V_MBB

      FROM T_LOG_CZGC_SJC T

     WHERE T.PK_VALUE = V_PK;

    BEGIN

      IF V_COUNT = 1 THEN

        --获取执行状态

        SELECT F_ZXZT(V_PK) INTO V_ZXZT FROM DUAL;

        IF V_ZXZT <> '0' THEN

          BEGIN

            --执行执行'0'

            DR_UP_SJC(V_PK, '0', SYSDATE, '0');

            --查询最大时间戳

            SELECT F_MAXSJC(V_PK) INTO V_MAXSJC FROM DUAL;

            SELECT SJC, INS_SQL

              INTO V_SJC, V_INSSQL

              FROM T_LOG_CZGC_SJC T

             WHERE T.PK_VALUE = V_PK;

          

            --执行SQL语句 

            EXECUTE IMMEDIATE V_INSSQL

              USING V_SJC, V_MAXSJC;

            --更新时间戳

            DR_UP_SJC(V_PK, '1', V_MAXSJC, '1');

            --写入日志

            DR_LOG(V_PK,

                   '1',

                   V_YSB,

                   V_MBB,

                   '',

                   0,

                   V_SJC,

                   V_MAXSJC,

                   V_SYSDATE);          

            --truncate table目标表        

            DR_TRUN(V_PK, '1');          

          EXCEPTION

            WHEN OTHERS THEN            

              V_ERR := SUBSTRB(SQLERRM, 1, 200);

              DR_UP_SJC(V_PK, '2', SYSDATE, '2');

              DR_LOG(V_PK, '2', V_YSB, V_MBB, V_ERR, 0, '', '', V_SYSDATE);

          END;

        ELSE

          NULL;

        END IF;      

      ELSE

        DR_LOG(V_PK,

               '2',

               V_YSB,

               V_MBB,

               '输入命令可能不是ZL',

               0,

               '',

               '',

               V_SYSDATE);

      END IF;    

    EXCEPTION

      WHEN OTHERS THEN

        DR_UP_SJC(V_PK, '2', SYSDATE, '2');

    END;

  END;

防止过程在未完成时,其他应用调用其运行,导致表阻塞;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29162273/viewspace-1735281/,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle表空间压缩
请登录后发表评论 登录
全部评论

注册时间:2014-10-24

  • 博文量
    44
  • 访问量
    82828