ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 動態增加StationRealTime 表分區的存儲過程(10)

動態增加StationRealTime 表分區的存儲過程(10)

原创 Linux操作系统 作者:huangbin7097 时间:2013-01-22 17:25:58 0 删除 编辑

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_PartDate:=to_char(SYSDATE+i,'YYYYMMDD');
  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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-04-04

  • 博文量
    59
  • 访问量
    65957