例4-19では、year
、month
およびday
の別々の3列に実際のDATE
情報が格納されている複数列のレンジ・パーティション表の列評価を示します。パーティション化の粒度は四半期です。評価されるパーティション表は、次のように作成されます。
12-DEC-2000の年の値は、1番目のパーティションbefore2001
に一致しているため、これ以上評価する必要はありません。
SELECT * FROM sales_demo PARTITION(before2001); YEAR MONTH DAY AMOUNT_SOLD ---------- ---------- ---------- ----------- 2000 12 12 1000
17-MAR-2001の情報はパーティションq1_2001
に格納されます。1番目のパーティション化キー列year
のみでは適切なパーティションを判断できないため、2番目のパーティション化キー列month
を評価する必要があります。
SELECT * FROM sales_demo PARTITION(q1_2001); YEAR MONTH DAY AMOUNT_SOLD ---------- ---------- ---------- ----------- 2001 3 17 2000
前のレコードと同じ決定ルールに従い、2番目の列month
により、1-NOV-2001の適切なパーティションはパーティションq4_2001
であると判断されます。
SELECT * FROM sales_demo PARTITION(q4_2001); YEAR MONTH DAY AMOUNT_SOLD ---------- ---------- ---------- ----------- 2001 11 1 5000
01-JAN-2002のパーティションはyear
列のみの評価で、future
パーティションが適切であると判断されます。
SELECT * FROM sales_demo PARTITION(future); YEAR MONTH DAY AMOUNT_SOLD ---------- ---------- ---------- ----------- 2002 1 1 4000
パーティション化キー列にMAXVALUE
が含まれている場合、後続の列のその他すべての値は無視されます。つまり、前述の例のパーティションfuture
の定義における(MAXVALUE
,0)という上限は、上限(MAXVALUE
,100)または上限(MAXVALUE
,MAXVALUE
)と同一です。
例4-19 複数列のレンジ・パーティション表の作成
CREATE TABLE sales_demo ( year NUMBER, month NUMBER, day NUMBER, amount_sold NUMBER) PARTITION BY RANGE (year,month) (PARTITION before2001 VALUES LESS THAN (2001,1), PARTITION q1_2001 VALUES LESS THAN (2001,4), PARTITION q2_2001 VALUES LESS THAN (2001,7), PARTITION q3_2001 VALUES LESS THAN (2001,10), PARTITION q4_2001 VALUES LESS THAN (2002,1), PARTITION future VALUES LESS THAN (MAXVALUE,0)); REM 12-DEC-2000 INSERT INTO sales_demo VALUES(2000,12,12, 1000); REM 17-MAR-2001 INSERT INTO sales_demo VALUES(2001,3,17, 2000); REM 1-NOV-2001 INSERT INTO sales_demo VALUES(2001,11,1, 5000); REM 1-JAN-2002 INSERT INTO sales_demo VALUES(2002,1,1, 4000);