Oracle Database 12c Release 2の新機能である複数列リスト・パーティション・テーブルを試します。
複数列リスト・パーティション・テーブル
Oracle Database 12c Release 1以前のリスト・パーティション・テーブルでは、パーティション列に指定できる列は1つだけでした。複数列でパーティション化したい場合は、パーティションを更にサブ・パーティションに分割するコンポジット・パーティションを利用する必要がありました。
Oracle Database 12cでは、リスト・パーティションに複数の列を指定できるようになりました。
複数列リスト・パーティション・テーブルは、ヒープ・テーブル、外部テーブルに指定できます。またサブ・パーティションにも指定できます。
自動リスト・パーティション・テーブルの作成
自動リスト・パーティション・テーブルを作成するには、CREATE TABLE文のPARTITION句に複数列を指定するだけです。複数列を指定できるようになったことで、{ALL|DBA|USER}_PART_KEY_COLUMNビューにはテーブルに対して複数の列名が出力されることになります。
SQL> CREATE TABLE plist2 (c1 VARCHAR2(10), c2 VARCHAR2(10), c3 VARCHAR2(10)) PARTITION BY LIST (c1, c2) (
PARTITION p1 VALUES ('VALUE#1', 'ITEM#1'),
PARTITION p2 VALUES ('VALUE#2', 'ITEM#2'),
PARTITION pd VALUES (DEFAULT)
);
Table created.
SQL> SELECT COLUMN_NAME FROM USER_PART_KEY_COLUMNS WHERE NAME='PLIST2' ;
COLUMN_NAME
------------------------------
C1
C2
自動リスト・パーティションとの組み合わせ
DEFAULTパーティションが存在しなければ、自動リスト・パーティション・テーブルとも組み合わせることができます。
SQL> ALTER TABLE plist2 DROP PARTITION pd ;
Table altered.
SQL> ALTER TABLE plist2 SET PARTITIONING AUTOMATIC ;
Table altered.
制約
複数列リスト・パーティションには以下の制約があります。
- パーティション化する複数列のうち、一部だけをDEFAULTと指定することはできません(VALUES ('ABC', DEFAULT)とは書けない)。
- 最大16列まで指定できます。