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、可以用灯泡检查法来检测冰箱漏电,将36V灯泡的两根导线,一根接冰箱外壳(无漆处)另一根接大地,如...
电饭煲通电就跳闸怎么回事 如果之前电饭煲从未出现过跳闸现象,此现象为新出现的,有可能是插板或者是电饭煲发生故障导致的。首先可以...
空调外机有温度传感器损坏 最可能是温度传感器泄漏导致的这个原因。可以使用热毛巾加热温度检测管,将按钮设置为最低温度,并使用测试...
九阳铁釜电饭煲故障代码种类及解... 故障代码的种类很多,有E0表示电饭煲上盖热敏电阻故障,需要更换上盖的热门电阻;E1是热敏电阻故障,需...
九阳电饭锅的拆卸步骤 先拆锅底的四个小螺丝,然后将暴露出来的底拆开,然后拆卸电饭锅那儿的小盖板,用螺丝刀拆螺丝就行,然后将...
华南理工男生课堂偷拍女生被当场... 据羊城晚报消息,5月13日,一段“华南理工大学男生教室偷拍女生”视频在网络传播,相关事件引发热议。视...
偷税超900万被查的网红白冰:... 刚刚,因偷税超900万元被查的网红白冰发布近60分钟长视频,控诉前员工联合他人侵吞公司资金、设局陷害...
AI人才需求攀升,如何打开就业... 当前正值高校毕业生求职关键期。记者在劳动力市场看到,随着人工智能蓬勃发展,各行业各领域对AI(人工智...
5月14日、15日土星火星上演... 5月14日、15日土星火星上演合月“接力赛” 5月14日、15日日出前,东方低空将接连上演土星合月...
投身具身智能,它石丁文超:知行... 90后、“天才少年”、博导...它石智航首席科学家丁文超身上有不少标签。他曾参与主导真正意义上的第一...