2

我有一個表在Oracle:如何按日期列對oracle表進行分區?

CREATE TABLE transaction (
    id INT NOT NULL, 
    accountnumber VARCHAR NOT NULL, 
    stmtvaluedate DATE NOT NULL, 
    ... 
) 

而且我想通過stmtvaluedate列對該表進行分區。我的目標是在一個月後創建一個新的分區。

有什麼好的腳本,對嗎?或者我必須創建靜態數量的分區?

最好的是:如果一個月過去了,一個新的分區將自動創建。

任何人都可以給我一個關於如何在每個月後按日期列對錶進行分區的例子嗎?如果自動分區是不可能的,那麼比我需要一個例子,它將從一個日期列開始每隔一個月就創建一個分區到一年。

謝謝!

+0

[這](http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#BAJHFFBE)可能會有所幫助。您可以使用間隔分區表。但它僅適用於Oracle 11.1和更高版本 – Tatiana

+0

謝謝。我可以用**周**或**日**分區嗎? – victorio

回答

7

你想要做的是完全可能的。這應做到:

CREATE TABLE transaction (
    id INT NOT NULL, 
    accountnumber VARCHAR2(30) NOT NULL, 
    stmtvaluedate DATE NOT NULL 
) 
PARTITION BY RANGE (stmtvaluedate) 
INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) 
    (partition transaction_old values less than (to_date('01-JAN-2000','DD-MON-YYYY'))); 
+0

如果我想要不是通過mounth分區,而是通過一個星期或一天分區,該怎麼辦?難道這些分辯?: **間隔(NUMTOYMINTERVAL(1, '周'))** 或 **間隔(NUMTOYMINTERVAL(1, '天'))** 又會有怎樣條款之日起01-JAN -2000?這是否意味着,如果* stmtvaluedate *值小於2000.01.01,則該行將進入分區? – victorio

+1

使用'NUMTODSINTERVAL'數天和數週。是的,1/1/2000條款旨在告訴Oracle將給定日期之前的所有數據放入單個分區。如果您有很多歷史數據,那麼該日期可能就不合適。 –

+0

完美,謝謝! – victorio

相關問題