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

 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;
时间: 2024-10-05 05:06:55

一个简单的自动创建分区存储过程的相关文章

一个简单的自动创建Shell脚本的脚本

因为自己平时会写一些小实验脚本,每次都要写Author,Description等很麻烦,便写了这么一个能够自行创建脚本的小脚本,代码如下,纯个人原创,比较粗糙,大神勿喷 #!/bin/bash # VER=0 AUT=0 TIM=0 DES=1 if [ $# -lt 1 ];then         echo "`basename $0` : -a|--author|-t|-d|-v|-f|--file /PATH/TO/FILE|-h"         exit 3 fi whil

Oracle 11g下自动创建分区

11g之前,维护分区需要手工.11g之后使用interval来实现自动扩展分区,简化了维护. 根据年  INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 根据月  INTERVAL(NUMTOYMINTERVAL(1,'MONTH')) 根据天  INTERVAL(NUMTODSINTERVAL(1,'DAY')) 下面用按月自动扩展来做个试验: SQL> create table t_range (id number not null PRIMARY KEY, test_

【老码农怀旧】一个简单好用的分页存储过程

数据库存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并用一个指定的名称存储起来,以后当需要数据库提供与已定义好的存储过程的功能相同的服务时,只需再次执行该存储过程. 数据库存储过程的优点: (1)存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度. (2)通常,复杂的业务逻辑需要多条 SQL 语句.这些语句要分别

阿里微服务专家手写Spring Boot 实现一个简单的自动配置模块

为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boot 的自动配置,更好的实现功能呢? 实战的开端 – Maven搭建 先创建一个Maven项目,我来手动配置下 POM 文件. 参数的配置 - 属性参数类 首先,我们定义一个自定义前缀,叫做 custom 吧.之前说到,这里的配置参数,可以通过 application.properties 中直接设置

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

分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强.在10g的Oracle版本中,要对分区表做调整,尤其是对RANGE分区添加新的分区都需要DBA手动定期添加,或都使用存储过程进行管理.在11G的版本中的Interval Partition不再需要DBA去干预新分区的添加,Oracle会自动去执行这样的操作,减少了DBA的工作量.Interval Par

【Linux】一个简单的线程创建和同步的例子

最近很多精力在Linux上,今天简单看了一下Linux上的线程和同步,其实不管windows还是Linux,OS层面的很多原理和概念都是相同的,很多windows之上的经验和概念完全可以移植到Linux上. 今天用到了创建线程和一个阻塞式的线程同步函数. 用到的几个函数 #include <pthread.h> //创建线程 int pthread_create( pthread_t* thread, /*线程标ID, pthread_t pthread_self(void) 可获取当前线程I

Linux自动创建分区,并挂载ASM磁盘

#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH i=1 while [ $i -lt 13 ] #硬盘数量,除系统盘之外是12块 do j=`echo $i|awk '{printf "%c",97+$i}'` #系统盘是sda,如果是其它的需要修改脚本 fdisk /dev/sd$j <<FORMAT n p 1 1 63 wq FORMAT mkfs.ext4 -T largefile /dev/sd

oracle11g interval(numtoyminterval())自动创建表分区

Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: ?

sql2008 计划自动创建数据库分区【转】

本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建分区作业. 步骤一:创建分区的计划任务 打开MsSQL2008,找到作业该项,如果打不开或者SQL Server代理是未启动状态,请先在windows服务中启动SQL Server代理(参考图片),   右击MsSQL2008对象资源管理器中的作业,选择新建作业,输入该作业你想用的名称,类别不用管,