mysql存储过程建表分区表_oracle 存储过程创建表分区

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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,'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,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,'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,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,'END');

COMMIT;

--DELETE PARTITION

INSERT INTO BIP_LOG_STAT_EXEC_TAB

VALUES

(TO_CHAR(SYSDATE,'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,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,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,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,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,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,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,'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,'BIP_MMS_PARTITION_PROC_ERROR',vErrInfo);

COMMIT;

END;

end bip_mms_partition_proc;

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

以上是编程之家为你收集整理的oracle 存储过程创建表分区全部内容,希望文章能够帮你解决oracle 存储过程创建表分区所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值