create or replace
PROCEDURE Station_ADD_PARTITION_PROC
(
partNum NUMBER --添加分区的个数
)
AS
v_SqlExec VARCHAR2(2000); --DDL语句变量
v_PartDate VARCHAR2(20); --创建分区的日期(YYYYMMDD)
v_PartDate1 VARCHAR2(20); --创建分区的日期(YYYYMMDD)
v_err_num NUMBER; --ORA错误号
v_err_msg VARCHAR2(100); --错误描述
v_cpu_info_max VARCHAR2(20); --mals_nm_cpu_info_t 表分区的最大日期
BEGIN
--查询已创建 mals_nm_cpu_info_t 表分区的最大日期
--P_NM_CPU_INFO_20080221
select max(SUBSTR(partition_name,9,8)) into v_cpu_info_max
from user_tab_partitions
WHERE table_name=UPPER('StationRealTime');
FOR i IN 1..partNum LOOP
--创建 mals_nm_cpu_info_t 表分区
IF v_cpu_info_max
v_PartDate1:=to_char(SYSDATE+i+1,'YYYYMMDD');
v_SqlExec:='ALTER TABLE StationRealTime ADD PARTITION STATION_' || v_PartDate ||
' values less than(to_timestamp(''' || v_PartDate1 || ''',''yyyy-mm-dd HH24:MI:SS'')) TABLESPACE TT_STATION';
dbms_output.put_line('创建 AlexMonitor.StationRealTime 表分区' || i || '='||v_SqlExec);
DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
v_err_num := SQLCODE;
v_err_msg := SUBSTR(SQLERRM, 1, 100);
dbms_output.put_line('AlexMonitor.Station_ADD_PARTITION_PROC执行出现异常,错误码='|| v_err_num || '错误描述=' || v_err_msg);
END Station_ADD_PARTITION_PROC;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26851211/viewspace-753063/ ,如需转载,请注明出处,否则将追究法律责任。