zoukankan      html  css  js  c++  java
  • Oralce动态的创建按月的分区

    说明:

    XXX为一个配置表,里面配置了要分区的表明,即CODENO = 'PARTITIONTABLENAME',只有每个月月底的时候,
    才会进入IF的判断,此外还有一个定时任务,每天去执行即可。

    存储过程:

     CREATE OR REPLACE PROCEDURE  ETL_CREATE_TABLE_PARTITION(ParaDate Date) IS
     V_RUNID VARCHAR2(32) :=PKG_UTILS.F_GET_RUNID();
     V_PROCDESC VARCHAR2(64) :='ETL 表分区的建立';
     V_SQL VARCHAR2(2000);
     V_COUNT  INTEGER;
     CURSOR C_PARTTABNAME IS SELECT ITEMNO AS TABNAME FROM XXX WHERE CODENO = 'PARTITIONTABLENAME' AND ISINUSE='1';
     
     /* 1.从XXX 中找出所有需要建立新分区的表名(游标)
        2.如果今天是月末,那么动态拼接建立下个月的表分区的SQL语句,直接运行
         -- 由于有MAXVALUE的存在,不能直接add partition,而是需要MAX分区split
         */
    BEGIN
       
        PKG_UTILS.LOG('BEGIN',V_RUNID,V_PROCDESC,'ETL开始...');
        
        IF TO_CHAR(PARTITION,'YYYYMM') <> TO_CHAR(PARADATE +1,'YYYYMM') THEN     
        FOR C --可以不定义 
          IN C_PARTTABNAME LOOP
          --查看此表新的分区是否存在
          SELECT COUNT(*)
            INTO V_COUNT
            FROM USER_TAB_PARTITIONS
          WHERE TABLE_NAME = C.TABNAME
         AND PARTITION_NAME = 'P_'|| TO_CHAR(PARADATE +1'YYYYMM');
    
           IF V_COUNT = 0 THEN
           
             -- 建立新分区
            V_SQL := 'ALTER TABLE '|| C.TABNAME
             || 'SPLIT PARTITION P_MAX '
             || 'AT(TO_DATE(''' || TO_CHAR(ADD_MONTHS(PARADATE+11),'YYYY/MM/DD') || ''',''YYYY/MM/DD'')) '
             || ' INTO (PARTITION P_' || TO_CHAR(ADD_MONTHS(PARADATE,1),'YYYY/MM/DD') || ''',''YYYY/MM/DD'') ';
              --其中一个表分区没有建立成功的话,下个还是要建立的
              BEGIN       
                EXECUTE IMMEDIATE V_SQL;
                EXCEPTION 
                WHEN OTHERS THEN NULL;
              END;
            END IF;
          END LOOP;
          END IF;
          PKG_UTILS.LOG('END',V_RUNID,V_PROCDESC ,'ETL结束....');
          EXCEPTION WHEN OTHERS THEN
          PKG_UTILS.LOG('ERROR',V_PROCDESC,SQLERRM,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
    END;
  • 相关阅读:
    C# Tips Written By Andrew Troelsen
    ASP.NET:性能与缓存
    New Feature In C# 2.0
    .NET Remoting中的通道注册
    通过应用程序域AppDomain加载和卸载程序集
    Some BrainTeaser in WinDev, Can you Solve them?
    ExtJs学习笔记(24)Drag/Drop拖动功能
    wap开发体会
    关于”System.ServiceModel.Activation.WebServiceHostFactory“与"<webHttp/>"以及RestFul/启用了Ajax的WCF服务
    验证码无刷新更换
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11863498.html
Copyright © 2011-2022 走看看