码迷,mamicode.com
首页 > 其他好文 > 详细

Oralce动态的创建按月的分区

时间:2019-11-14 23:34:43      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:desc   spl   nbsp   varchar   select   count   sql语句   dia   pre   

说明:

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 +1YYYYMM);

       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;

 

Oralce动态的创建按月的分区

标签:desc   spl   nbsp   varchar   select   count   sql语句   dia   pre   

原文地址:https://www.cnblogs.com/dalianpai/p/11863498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!