テーブルとインデックスは複数のパーティションに分割でき、各パーティションは同一の論理属性を持ちます。例えば、テーブル内のすべてのパーティションは同一の列と制約定義を共有し、インデックス内のすべてのパーティションは同一のインデックス列を共有します。
ユーザーはパーティション拡張名とサブパーティション拡張を使用して、特定のパーティションレベルおよびサブパーティションレベルの操作を実行できます。例えば、特定のパーティションまたはサブパーティションからすべての行を削除することができます。拡張名がない場合、削除範囲を定義するために条件文(WHERE句)を使用する必要があります。RangeパーティションテーブルやListパーティションテーブルでは、特に範囲パーティションキーが複数の列を使用する場合、条件文を使用してパーティションレベルの操作を定義することは適切ではありません。一方、Hashパーティションとサブパーティションはシステムが定義したハッシュ関数に基づいているため、条件文を使用することも困難です。
パーティション拡張名を使用すると、パーティションをテーブルのように扱うことができます。この方法の利点の一つは(Rangeパーティションのテーブルに最も有用です)、他のユーザーまたはロールにこれらのビューへのアクセス権限を付与(または取り消し)することで、パーティションレベルのアクセス制御メカニズムを構築できる点です。パーティションをテーブルとして使用するには、単一のパーティションからデータを選択してビューを作成し、そのビューをテーブルとして使用する必要があります。
構文
ユーザーは以下のSQL構文を使用して、パーティション拡張テーブル名とサブパーティション拡張テーブル名を指定できます。
パーティション拡張テーブル名の構文は次のとおりです:
PARTITION partition
サブパーティション拡張テーブル名の構文は次のとおりです:
SUBPARTITION subpartition
DMLステートメントINSERT、UPDATE、DELETE、およびANALYZEステートメントでは、パーティションまたはサブパーティション名の周囲に括弧を付ける必要があります。
拡張名の制限
パーティション拡張テーブル名とサブパーティション拡張テーブル名を使用する際には、以下の制限があります:
名前にはシノニムが含まれていません。パーティションまたはサブパーティション拡張名は、ベーステーブルを使用して指定する必要があり、シノニム、ビュー、またはその他のオブジェクトを使用することはできません。
PARTITIONおよびSUBPARTITION句では、パーティションまたはサブパーティション名にバインド変数を指定することはできません。
例
次の例では、パーティションテーブルsalesにパーティションsales_q1_2021があり、それに対してビューを作成し、その後パーティションから一部の行を削除します。
/*パーティション sales_q1_2000 にビュー Q1_2021_sales を作成します*/
CREATE VIEW Q1_2021_sales
AS
SELECT *
FROM sales PARTITION (SALES_Q1_2021);
/*ビュー Q1_2021_sales 内で条件 amount_sold < 0 を満たす値を削除します*/
DELETE FROM Q1_2021_sales
WHERE amount_sold < 0;