創建分區表(按照年份分區,自動新增分區)


創建分區表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值來截取對應的時間,再用以修改為分區名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM