轉自: https://blog.csdn.net/sdtysdu2000/article/details/9066413
ORACLE11g的表分區功能中可以建立新類型的Interval分區表,它可以根據加載數據,自動創建指定間隔的分區,也就是說建立了Interval分區 ,就不必像ORACLE10以前的表分區那樣需要提前爲新數據建立分區,它會自動創建,以下是創建的語句。注意其中INTERVAL後面指定的關鍵詞,對於月與天是不同的,具體已經標註出來。
按年分區:
CREATE TABLE TEST_PART
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE
)
PARTITION BY RANGE (ORDER_DATE)
INTERVAL (NUMTOYMINTERVAL(1,'year')
(PARTITION part1
VALUES LESS THAN (TO_DATE ('2013-06-01', 'YYYY-MM-DD')),
PARTITION part2
VALUES LESS THAN (TO_DATE ('2014-06-01', 'YYYY-MM-DD'))
)
按月分區:
CREATE TABLE TEST_PART
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE
)
PARTITION BY RANGE (ORDER_DATE)
INTERVAL (NUMTOYMINTERVAL(1,’month’)
(PARTITION part1
VALUES LESS THAN (TO_DATE ('2013-06-01', 'YYYY-MM-DD')),
PARTITION part2
VALUES LESS THAN (TO_DATE ('2013-07-01', 'YYYY-MM-DD'))
)
按周分區:
CREATE TABLE TEST_PART
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE
)
INTERVAL ( NUMTODSINTERVAL (7, 'day') )
(PARTITION part1
VALUES LESS THAN (TO_DATE ('2013-06-01', 'YYYY-MM-DD')),
PARTITION part2
VALUES LESS THAN (TO_DATE ('2013-06-08', 'YYYY-MM-DD'))
)
按天分區:
CREATE TABLE TEST_PART
(TIME_ID NUMBER,
REGION_ID NUMBER,
ORDER_ID NUMBER,
ORDER_DATE DATE
)
INTERVAL ( NUMTODSINTERVAL (1, 'day') )
(PARTITION part1
VALUES LESS THAN (TO_DATE ('2013-06-01', 'YYYY-MM-DD')),
PARTITION part2
VALUES LESS THAN (TO_DATE ('2013-06-02', 'YYYY-MM-DD'))
)
這兩個關鍵詞的不同之處 在於:
numtodsinterval(<x>,<c>) ,x是一個數字,c是一個字符串,
表明x的單位,這個函數把x轉爲interval day to second數據類型
常用的單位有 ('day','hour','minute','second')
example
SQL> select sysdate,sysdate+numtodsinterval(3,'hour') as res from dual;
SYSDATE RES
2007-09-05 01:45:34 2007-09-05 04:45:34
numtoyminterval 與numtodsinterval函數類似,將x轉爲interval year to month數據類型
常用的單位有'year','month'
example
SQL> select sysdate,sysdate+numtoyminterval(3,'year') as res from dual;
SYSDATE RES
2007-09-05 01:54:53 2010-09-05 01:54:53