oracle 11g的interval partition 如何按天\周\月\年分區

轉自: 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章