1. 程式人生 > >oracle11g分割槽表按時間自動建立

oracle11g分割槽表按時間自動建立

   首先來介紹下numtodsinterval和numtoyminterval兩個函式。
   numtoyminterval和numtoyminterval是日期轉換函式,作用:可以將數字轉換成相應的日期單位時間
   語法:NUMTOYMINTERVAL ( n , 'char_expr' )
   char_expr:日期描述,可以是YEAR和MONTH。
   通常當我們使用add_month新增月時,如果輸入是本月月底的日期,那麼得到的也是月底的日期,比如add_month(to_date('2007-02-28','yyyy-mm-dd'),1)得到的就會是'2007-03-31',而不是'2007-03-28'。
   此時,如果使用的是to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(1,'month'),那麼得到的就是'2007-03-28'。
   numtodsinterval的用法和numtoyminterval一樣只是他的引數為day、hour、minute、second。
   Oracle 11g之前,維護分割槽需要手工。11g之後使用interval來實現自動擴充套件分割槽,簡化了維護。
   根據年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
   根據月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
   根據天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))
   根據時分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})
create table tablenames (fid number not null PRIMARY KEY, sdate date,addr varchar2(1000))
partition by range (sdate) interval (numtoyMinterval (1,'MONTH'))
(
partition ptablenames values less than (to_date('2017-02-13', 'yyyy-mm-dd'))
)
   建立完畢後通過如下sql進行查詢分割槽:
select partition_name from user_tab_partitions where
table_name='tablenames';
   新增不同年份的資料,就會發現會按照年自動生成對應分割槽。