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

Posted 易连山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的自动创建分区存储过程相关的知识,希望对你有一定的参考价值。

 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分区表自动清理分区

创建自己的代码片段(CodeSnippet)

由于创建了大量分区,SQL 处理器耗尽了内部资源

Oracle 11g 新特性:自动创建分区(Interval Partition)

如何更改 Glue Crawler 创建的自动检测分区的列名?

按天分区并通过存储过程删除历史分区