oracle 间隔分区多字段,Oracle 11g 间隔分区(INTERVAL)批量规范命名

友情提示:请在业务空闲是操作。为什么呢?

--Oracle 11g 间隔分区(INTERVAL)重命名,批量生成rename分区脚本

set linesize

180

set serverout on

declare

v_table_owner          varchar2(100) :=

‘OP%‘;

v_table_name_day_p     varchar2(100);

v_table_name_month_p

varchar2(100);

v_print                number:=1; --1:只打印执行脚本,2,DB直接执行

v_new_partition_name   varchar2(100);

v_sql

varchar2(2000);

vSqlerrm               varchar2(256);

begin

for i

in (select t1.table_owner,

t2.table_name,

t1.partition_name,

t2.interval,

t1.high_value

from

dba_tab_partitions t1,dba_part_tables t2

where t2.owner =

t1.table_owner

and t2.table_name = t1.table_name

and t1.interval =

‘YES‘

and t2.partitioning_type=‘RANGE‘

and t1.partition_name like

‘SYS\_%‘ escape ‘\‘

and table_owner like v_table_owner order by

t1.table_owner,t1.partition_name) loop

if

i.interval=‘NUMTODSINTERVAL(1,‘‘DAY‘‘)‘ then

v_table_name_day_p :=

substr(i.table_name, 1, 19);  --日分区取前19位字符;

execute immediate ‘select

to_char(‘ || i.high_value ||

‘ -

NUMTODSINTERVAL(1,‘‘DAY‘‘), ‘‘"‘ ||

v_table_name_day_p

|| ‘"YYYY"M"MM"D"DD‘‘) from dual‘

into

v_new_partition_name;

elsif i.interval=‘NUMTOYMINTERVAL(1,‘‘MONTH‘‘)‘

then

v_table_name_month_p := substr(i.table_name, 1, 23);

--月分区取前23位字符;

execute immediate ‘select to_char(‘ || i.high_value

||

‘ - NUMTOYMINTERVAL(1,‘‘MONTH‘‘), ‘‘"‘

||

v_table_name_month_p || ‘"YYYY"M"MM‘‘) from

dual‘

into v_new_partition_name;

end if;

if v_print=1

then

dbms_output.put_line(‘alter table ‘ || i.table_owner || ‘.‘

||i.table_name || ‘ rename partition ‘ ||i.partition_name || ‘ to ‘ ||

v_new_partition_name || ‘;‘);

elsif v_print=2 then

v_sql :=

‘alter table ‘ || i.table_owner || ‘.‘ ||i.table_name || ‘ rename partition ‘

||i.partition_name || ‘ to ‘ || v_new_partition_name;

execute

immediate v_sql;

end if;

end loop;

exception

when others

then

vSqlerrm := sqlerrm;

dbms_output.put_line(vSqlerrm||‘|‘||v_sql);

end;

原文:http://8858975.blog.51cto.com/8848975/1785477

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值