CREATE OR REPLACE PROCEDURE BIP_MMS_PARTITION_PROC AS

v_Mms_Task_Tab VARCHAR2(50); --表名

v_Mms_Content_Tab VARCHAR2(50);

v_Mms_User_Tab VARCHAR2(50);

v_TableSpace VARCHAR2(20); --表空间

v_PartPreFlag VARCHAR2(50); --分区名标识

v_SqlCursor NUMBER; --游标

v_SqlExec VARCHAR2(2000); --执行语句

v_PartPreDate VARCHAR2(20); --分区日期

v_RangeValue NUMBER;

v_RangeDate NUMBER;

v_Rows NUMBER(30) := 0;

v_Num NUMBER(30) := 0;

vErrInfo VARCHAR2(200);

p_DateFrom NUMBER;

p_PartNum NUMBER;

p_Range NUMBER;

BEGIN

v_Mms_Task_Tab := 'BIP_MMS_MT_TASK_LOG_TAB_TEST';

v_Mms_Content_Tab := 'BIP_MMS_MT_CONTENT_TAB_TEST';

v_Mms_User_Tab := 'BIP_MMS_MT_USER_LOG_TAB_TEST';

-- 读取配置参数

BEGIN

SELECT TO_NUMBER(VALUE)

INTO p_DateFrom

FROM BIP_OTHERS_PROPERTIES_TAB

WHERE NAME = 'p_DateFrom';

SELECT TO_NUMBER(VALUE)

INTO p_PartNum

FROM BIP_OTHERS_PROPERTIES_TAB

WHERE NAME = 'p_PartNum';

SELECT TO_NUMBER(VALUE)

INTO p_Range

FROM BIP_OTHERS_PROPERTIES_TAB

WHERE NAME = 'p_Range';

EXCEPTION

WHEN OTHERS THEN

BEGIN

p_DateFrom := 0;

p_PartNum := 1;

p_Range := 180;

END;

END;

--记录存储过程添加分区

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),

'BIP_MMS_PARTITION_PROC_ADD',

'BEGIN');

COMMIT;

--ADD PARTITION

FOR i IN 1 .. p_PartNum LOOP

--BIP_MMS_MT_CONTENT_TAB 添加分区

v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

dbms_output.put_line(v_PartPreDate);

v_Num := 0;

v_TableSpace := 'BIP_MMS_TS_TEST';

v_PartPreFlag := 'MMS_MT_CONTENT';

SELECT COUNT(*)

INTO v_Num

FROM user_tab_partitions

WHERE table_name = v_Mms_Content_Tab

AND SUBSTR(partition_name, 16, 8) = v_PartPreDate;

IF v_Num < 1 THEN

v_RangeDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

v_RangeValue := v_RangeDate || '240000';

dbms_output.put_line(v_RangeValue);

v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab || ' ADD PARTITION ' ||

v_PartPreFlag || '_' || v_PartPreDate ||

' VALUES LESS THAN(''' || v_RangeValue ||

''') TABLESPACE ' || v_TableSpace;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

END IF;

--BIP_MMS_MT_TASK_LOG_TAB_TEST 添加分区

v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

v_Num := 0;

v_TableSpace := 'BIP_MMS_TS_TEST';

v_PartPreFlag := 'MMS_MT_TASK_LOG';

SELECT COUNT(*)

INTO v_Num

FROM user_tab_partitions

WHERE table_name = v_Mms_Task_Tab

AND SUBSTR(partition_name, 17, 8) = v_PartPreDate;

IF v_Num < 1 THEN

v_RangeDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

v_RangeValue := v_RangeDate || '240000';

v_SqlExec := 'ALTER TABLE ' || v_Mms_Task_Tab || ' ADD PARTITION ' ||

v_PartPreFlag || '_' || v_PartPreDate ||

' VALUES LESS THAN(''' || v_RangeValue ||

''') TABLESPACE ' || v_TableSpace;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

END IF;

--BIP_MMS_MT_USER_LOG_TAB_TEST 添加分区

v_PartPreDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

v_Num := 0;

v_TableSpace := 'BIP_MMS_TS_TEST';

v_PartPreFlag := 'MMS_MT_USER_LOG';

SELECT COUNT(*)

INTO v_Num

FROM user_tab_partitions

WHERE table_name = v_Mms_User_Tab

AND SUBSTR(partition_name, 17, 8) = v_PartPreDate;

IF v_Num < 1 THEN

v_RangeDate := TO_CHAR(SYSDATE + p_DateFrom + i, 'YYYYMMDD');

v_RangeValue := v_RangeDate || '240000';

v_SqlExec := 'ALTER TABLE ' || v_Mms_User_Tab || ' ADD PARTITION ' ||

v_PartPreFlag || '_' || v_PartPreDate ||

' VALUES LESS THAN(''' || v_RangeValue ||

''') TABLESPACE ' || v_TableSpace;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

END IF;

END LOOP;

COMMIT;

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE, 'yyyymmddhh24miss'), 'BIP_MMS_PARTITION_PROC_ADD', 'END');

COMMIT;

--DELETE PARTITION

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),

'BIP_MMS_PARTITION_PROC_DEL',

'BEGIN');

COMMIT;

BEGIN

v_PartPreFlag := 'MMS_MT_CONTENT' || '_' ||

TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');

dbms_output.put_line(v_PartPreFlag);

v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab ||

' TRUNCATE PARTITION ' || v_PartPreFlag;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' truncated');

v_SqlExec := 'ALTER TABLE ' || v_Mms_Content_Tab || ' DROP PARTITION ' ||

v_PartPreFlag;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' dropped');

END;

BEGIN

v_PartPreFlag := 'MMS_MT_TASK_LOG' || '_' ||

TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');

dbms_output.put_line(v_PartPreFlag);

v_SqlExec := 'ALTER TABLE ' || v_Mms_Task_Tab || ' TRUNCATE PARTITION ' ||

v_PartPreFlag;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' truncated');

v_SqlExec := 'ALTER TABLE ' || v_Mms_Task_Tab || ' DROP PARTITION ' ||

v_PartPreFlag;

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' dropped');

END;

BEGIN

v_PartPreFlag := 'MMS_MT_USER_LOG' || '_' ||

TO_CHAR(SYSDATE - p_Range, 'yyyymmdd');

dbms_output.put_line(v_PartPreFlag);

v_SqlExec := 'ALTER TABLE ' || v_Mms_User_Tab || ' TRUNCATE PARTITION ' ||

v_PartPreFlag;

dbms_output.put_line(v_SqlExec);

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' truncated');

v_SqlExec := 'ALTER TABLE ' || v_Mms_User_Tab || ' DROP PARTITION ' ||

v_PartPreFlag;

v_SqlCursor := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(v_SqlCursor, v_SqlExec, DBMS_SQL.NATIVE);

v_Rows := DBMS_SQL.EXECUTE(v_SqlCursor);

DBMS_SQL.CLOSE_CURSOR(v_SqlCursor);

dbms_output.put_line(v_PartPreFlag || ' dropped');

END;

COMMIT;

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),

'BIP_MMS_PARTITION_PROC_DEL',

'END');

COMMIT;

EXCEPTION

WHEN OTHERS THEN

BEGIN

ROLLBACK;

dbms_output.put_line(TO_CHAR(SQLCODE));

vErrInfo := SUBSTR(SQLERRM, 1, 200);

dbms_output.put_line(TO_CHAR(vErrInfo));

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),

'BIP_MMS_PARTITION_PROC_ERROR',

vErrInfo);

COMMIT;

END;

end bip_mms_partition_proc;

oracle自动创建分区存储过程,oracle 存储过程创建表分区相关推荐

  1. oracle 分表和分区哪个好_oracle 分表分区

    oracle 分表分区 一. 查询表所占存储空间 每张表都是作为"段"来存储的,可以通过user_segments视图查看其相应信息. 段(segments)的定义:如果创建一个堆 ...

  2. Oracle入门(十二F)之表分区

    转载自 oracle的 分表 详解 -----表分区 一.分区表基础知识 (1) 表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, ...

  3. 在toad新增oracle用户,利用toad发现oracle自动为你干了什么(表空间建立和用户建立)...

    利用toad发现oracle自动为你干了什么(表空间建立和用户建立) Oracle:10.2.0.1 Windows 2003 一.表空间 sql>Create tablespace dba d ...

  4. oracle 自动异地备份,实现Oracle异地数据自动备份方案 | 学步园

    来源:网络/责编:编程入门 作者:不详 相关命令 文中主要用到三个命令,这里先单独介绍一下: export: 将数据库中数据备份成一个二进制系统文件,它有三种模式: 用户模式.表模式.整个数据库模式. ...

  5. mysql 删除hash分区_MySQL-如何删除hash表分区

    一个大表,之前是以hash分区表的形式存在的, MySQL> show create table history_uint; | history_uint | CREATE TABLE `his ...

  6. MySQL的表分区详解_MySQL的表分区详解

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...

  7. mysql实现表分区不同的磁盘_SQLServer表分区详解_MySQL

    分区请三思: 1.虽然分区可以带来众多的好处,但是同时也增加了实现对象的管理费用和复杂性.因此在进行分区之前要首先仔细的考虑以确定是否应为对象进行分区. 2.在确定了为对象进行分区后,下一步就要确定分 ...

  8. oracle自动还原,什么是oracle自动恢复操作

    这是由系统进行的恢复.无需人的管理和操作.一般当系统由于突然掉电而出现故障时用这种方法.当再次启动数据库就会进行自动恢复. 不像简单的DOS系统,oracle系统在运行时有许多事务要处理,并且存在许多 ...

  9. oracle 自动补全函数,Oracle自我补充之trunc()函数的使用方法

    1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: 其中: date 一个日期值 fmt 日期格式,该日期将由指定的元素格式所截去.忽略它则由最近的 ...

  10. oracle自动生成拼音码,oracle 产生拼音码的函数

    create or replace function pro_f_getspell(vstr varchar2, --提交的字符串 vlen number) --返回字符串的长度 return var ...

最新文章

  1. webp的js插件_让浏览器全面兼容WebP图片格式
  2. python全栈学习--day3
  3. ITK:图像的置换轴
  4. MySQL数据库序列的作用_MySQL数据库:序列使用
  5. 华为21级程序员月薪曝光:270k封神!众网友直呼长见识……
  6. python中的元组操作
  7. MYSQL重置密码遇到ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)问题
  8. ACM-树重心的性质及动态维护
  9. ORA-00018-超出最大连接数
  10. docker常用操作和命令
  11. 小米球外网映射本地tomcat
  12. 我是这么自学Java的
  13. Java读取计算 PPT,Word,excel的页数
  14. 阿里云吴翰清:如何落地数字化转型
  15. EXCEL,锁定单元格后往下拉,但后面需要继续复制粘贴时又希望步锁定,该怎么办?小技巧,先把$ 替换为空后再粘贴
  16. 解决phpmyadmin加载慢问题
  17. Android获取明天日期
  18. Poco访问mysql
  19. 无线路由器 mc服务器,无线路由器的mc地址.doc
  20. 彭适辰 - 资本寒冬:给创业者的十点建议

热门文章

  1. spring 处理带有特殊字符的请求_程序员笔记|常见的Spring异常分析及处理
  2. java程序在内存中的存储分配
  3. python订阅kafka_程序员基础解答:什么是Kafka?
  4. Java集合List,Set,Map,Queue,Deque
  5. Unity面试题精选(3)
  6. OpenShift - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift
  7. 准备用于AI人脸识别的数据集
  8. Abp VNext 项目创建简介
  9. android system webview diable,FV悬浮球橡皮泥主题
  10. 微信登录画面_微信登录界面改版,美炸了!