2012-09-21 32 views
0

我想使用範圍分區對10g中的1個月間隔分區txn表。表具有txn_date。Oracle 10g範圍分區,間隔爲1個月

我希望分區是自動的。 我認爲這是可能的11,但有什麼辦法可以達到10g。

create table part 
(
    txn_Date date 
) 
PARTITION BY RANGE (txn_date) 
INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) 
(
    partition p1 values less than (TO_DATE('01-NOV-2007','DD-MON-YYYY')) 
); 
+0

問題和答案都對日期格式或語言做出了假設。我強烈建議你總是使用ANSI日期文字,例如'date'2007-11-01''。 –

回答

0

您可以安排作業在適當時添加這些分區。由於這是一個DDL,因此可以使用動態SQL來完成。

例如,對於按月份進行數據分區的表格,您可以在每個月的最後一個週末進行一項工作,創建下個月的部分工作。

create or replace procedure p_part_maintenance_mnthy 
as 
declare 
    v_partition_name all_tab_partitions.partition_name%type; 
    v_limit varchar2(50); 
begin 

    select to_char(trunc(add_months(sysdate,1),'MM'),'MonYYYY') 
    into v_partition_name 
    from dual; --eg. output Oct2012 

    select to_char(trunc(add_months(sysdate,2),'MM'),'dd-mon-yyyy') 
    into v_limit 
    from dual; -- eg. output 01-nov-2012 

execute immediate 'ALTER TABLE sales ADD PARTITION ' || v_partition_name || 
        ' VALUES LESS THAN (' || v_limit || ') tablespace XYZ'; 

end; 
/

通常,所有類似的函數調用如上述(每日,每月和每年)將是在一個封裝中,並採取在表名作爲輸入,以及。必要時可以從個別程序中調用。