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

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

时间:2016-07-05 13:48:21      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

 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;

 

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

标签:

原文地址:http://www.cnblogs.com/lianshan/p/5643053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!