创建分区表(按照年份分区,自动新增分区)

创建分区表AAA,通过字段创建时间的年份来分区,分区表自动根据插入的数据新增对应的分区,不过此处自动创建的分区名称为系统创建的,如:SYS_24。

CREATE TABLE AAA 
( 
ID NUMBER(8), 
CREATETIME DATE, 
VALUE NUMBER(8) 
) 
PARTITION BY RANGE(CREATETIME) 
INTERVAL(NUMTOYMINTERVAL(1,'YEAR')) 
( 
PARTITION P2014 VALUES LESS THAN(TO_DATE('2015-01-01','YYYY-MM-DD')) 
);

 

不过,这种分区名称难以使用,故后面会使用存储过程来修改分区表的分区名。

create or replace procedure pro_modified_partition_name
as
cursor partitiionList is SELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,high_value FROM USER_TAB_PARTITIONS WHERE TABLE_NAME ='AAA' and instr(PARTITION_NAME, 'SYS') > 0;  
row_p partitiionList%rowtype;
pName VARCHAR2(100);
hv VARCHAR2(2000);
hv_year number;
pNewName varchar2(100);
SQL_STMT VARCHAR2(200);
begin
 open partitiionList;
 for row_p in partitiionList loop
      pName:= row_p.PARTITION_NAME;
      hv:= row_p.high_value;
      hv_year := to_number(substr(hv,11,4))-1;
      pNewName := 'P'|| hv_year;
      --执行alter语句要使用动态sql(execute immediate)
      SQL_STMT := 'alter table AAA rename partition '||pName||' to '||pNewName;
      execute immediate SQL_STMT;
  end loop row_p;
  close partitiionList;
end;

通过分区表的high_value值来截取对应的时间,再用以修改为分区名。

转载于:https://www.cnblogs.com/kehaocheng/p/7388757.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值