テーブルとインデックスは複数のパーティションに分割でき、各パーティションは同一の論理属性を持ちます。例えば、テーブルのすべてのパーティションは同じ列と制約定義を共有し、インデックスのすべてのパーティションは同じインデックス列を共有します。
ユーザーはパーティションエクステンション名とサブパーティションエクステンションを使用して、特定のパーティションレベルおよびサブパーティションレベルの操作を実行できます。例えば、特定のパーティションまたはサブパーティションからすべての行を削除する場合です。エクステンション名がない場合は、削除範囲を定義するために判断文(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;