• 一个简单的自动创建分区存储过程


     1 CREATE OR REPLACE PROCEDURE PRO_DEL_ADD_PARTITION
     2 AS
     3 /***************************************************
     4   ** 功能:按日添加本月的分区
     5   ** 创建者:sfit1053
     6   ** 创建时间:20150825
     7   ****************************************************/
     8   l_from_date  DATE;            -- 存放循环起始日期(当月的第一天)
     9   l_to_date    DATE;            -- 存放循环截止日期(下月的第一天)
    10   l_partition  VARCHAR2(30);    -- 表分区名
    11   l_p_exist    NUMBER(18,0);    -- 判断表分区是否已经存在
    12   l_sql1       VARCHAR2(200);   -- 存放将要执行的SQL语句
    13   l_sql2       VARCHAR2(1000);   -- 存放将要执行的SQL语句
    14   l_sql3       VARCHAR2(200);   -- 存放将要执行的SQL语句
    15   RET_MSG      VARCHAR2(300);   --执行出错错误信息
    16 
    17 BEGIN
    18 
    19   l_from_date  := TRUNC(sysdate,'MM');
    20   l_to_date    := ADD_MONTHS(l_from_date,1);
    21 
    22   WHILE l_from_date< l_to_date LOOP
    23     l_partition := 'D'||TO_CHAR(l_from_date,'YYYYMMDD');
    24     SELECT NVL(COUNT(1),0) INTO l_p_exist
    25       FROM USER_TAB_PARTITIONS
    26      WHERE table_name='UCMP_PUSH_MESSAGE'
    27        AND partition_name=l_partition;
    28 
    29     IF l_p_exist=0 THEN
    30         l_sql1 := 'ALTER TABLE UCMP_PUSH_MESSAGE_BAK ADD PARTITION "'||l_partition||'" VALUES LESS THAN (to_date('''||TO_CHAR(l_from_date,'YYYY-MM-DD')||''','''||'yyyy-mm-dd'||'''))';
    31         l_sql3 := 'ALTER TABLE UCMP_PUSH_MESSAGE ADD PARTITION "'||l_partition||'" VALUES LESS THAN (to_date('''||TO_CHAR(l_from_date,'YYYY-MM-DD')||''','''||'yyyy-mm-dd'||'''))';
    32        EXECUTE IMMEDIATE l_sql1;
    33        EXECUTE IMMEDIATE l_sql3;
    34     END IF;
    35     l_from_date := l_from_date+1;
    36   END LOOP;
    37   RET_MSG :='OK';
    38 EXCEPTION WHEN OTHERS THEN
    39  BEGIN
    40    RET_MSG  := '存储过程PRO_DEL_ADD_PARTITION执行错误!' || CHR(10) ||
    41                     '错误代码:' || SQLCODE || CHR(10) || '错误信息:' ||
    42                     SUBSTR(SQLERRM, 1, 128);
    43  END;
    44 l_sql2:='insert into ucmp_cl_script_log(pro_name,log_time,log_des) values(''PRO_DEL_ADD_PARTITION'',sysdate,'''||RET_MSG||''')';
    45 EXECUTE IMMEDIATE l_sql2;
    46 COMMIT;
    47 END PRO_DEL_ADD_PARTITION;
  • 相关阅读:
    异步编程案例分享—后台线程事实通知任务进度
    ORACLE 常见错误
    设计模式——工厂模式
    sql 脚本编写之路 常用语句(一)
    C# 深入浅出 异步(八)
    设计模式——单例模式
    Sql Server 学习链接
    SqlServer 常用函数
    2016 ACM/ICPC Asia Regional Shenyang Online
    2016 ACM/ICPC Asia Regional Dalian Online
  • 原文地址:https://www.cnblogs.com/lianshan/p/5643053.html
Copyright © 2020-2023  润新知