パーティション化では、仮想列を任意の正規列として使用できます。仮想列を使用する場合、時間隔パーティション化およびコンポジット・パーティション化のすべての組合せを含み、パーティション・メソッドがすべてサポートされます。パーティション化列として使用する仮想列では、PL/SQLファンクションへのコールは使用できません。
関連項目:
仮想列を作成する構文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例4-20では、サブパーティション化キーに仮想列を使用して、レンジ - レンジでパーティション化されたsales表を示します。仮想列では、amount_soldとquantity_soldを掛けて販売の合計値が計算されます。
この例で示されているように、仮想列では行移動もサポートされています。行移動が有効化されている場合、仮想列が別のパーティションに属する値に評価されると、行はあるパーティションから別のパーティションに移行されます。
例4-20 サブパーティション化キーに仮想列を使用した表の作成
CREATE TABLE sales
( prod_id NUMBER(6) NOT NULL
, cust_id NUMBER NOT NULL
, time_id DATE NOT NULL
, channel_id CHAR(1) NOT NULL
, promo_id NUMBER(6) NOT NULL
, quantity_sold NUMBER(3) NOT NULL
, amount_sold NUMBER(10,2) NOT NULL
, total_amount AS (quantity_sold * amount_sold)
)
PARTITION BY RANGE (time_id) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
SUBPARTITION BY RANGE(total_amount)
SUBPARTITION TEMPLATE
( SUBPARTITION p_small VALUES LESS THAN (1000)
, SUBPARTITION p_medium VALUES LESS THAN (5000)
, SUBPARTITION p_large VALUES LESS THAN (10000)
, SUBPARTITION p_extreme VALUES LESS THAN (MAXVALUE)
)
(PARTITION sales_before_2007 VALUES LESS THAN
(TO_DATE('01-JAN-2007','dd-MON-yyyy'))
)
ENABLE ROW MOVEMENT
PARALLEL NOLOGGING;