溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle 11g 間隔分區(qū)(INTERVAL)批量規(guī)范命名

發(fā)布時間:2020-07-15 18:58:25 來源:網(wǎng)絡(luò) 閱讀:896 作者:s_o_m 欄目:關(guān)系型數(shù)據(jù)庫


友情提示:請在業(yè)務(wù)空閑是操作。為什么呢?


--Oracle 11g 間隔分區(qū)(INTERVAL)重命名,批量生成rename分區(qū)腳本
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:只打印執(zhí)行腳本,2,DB直接執(zhí)行
  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);  --日分區(qū)取前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); 
--月分區(qū)取前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;


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI