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

 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;

 

posted @ 2016-07-05 11:36  别问1991  阅读(917)  评论(0编辑  收藏  举报