Oracle 11g 间隔分区(INTERVAL)批量规范命名
admin
2023-05-02 20:23:56
0次


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


--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;


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...