コレクション型

PL/SQLには、連想配列、VARRAY (可変サイズの配列)およびネストした表の3つのコレクション型があります。

表6-1に、それぞれの類似点と相違点の概要を示します。

表6-1 PL/SQLコレクション型

コレクション型 要素の数 索引タイプ 密か疎か 未初期化時のステータス 定義される場所 ADT属性のデータ型として使用可能かどうか

連想配列(または索引付き表)

指定なし

文字列またはPLS_INTEGER

密または疎のいずれか

なし

PL/SQLブロック内またはパッケージ内

不可

VARRAY(可変サイズの配列)

指定されている

整数

常に密

Null

PL/SQLブロック内、パッケージ内またはスキーマ・レベル

スキーマ・レベルで定義されている場合のみ

ネストした表

指定なし

整数

密で始まり、疎になる可能性あり

Null

PL/SQLブロック内、パッケージ内またはスキーマ・レベル

スキーマ・レベルで定義されている場合のみ

要素の数

要素の数が指定されている場合、その数がコレクション内の要素の最大数です。要素の数が指定されていない場合は、索引タイプの上限がコレクション内の要素の最大数になります。

密か疎か

dense collectionとは、要素間に欠損がないコレクションのことで、最初と最後の要素の間にあるすべての要素が定義され、値を含んでいます(要素にNOT NULL制約が指定されていない場合にかぎり、値にNULLを使用できます)。疎コレクションは、要素間に欠損があります。

未初期化時のステータス

空のコレクションは、要素を持たずに存在するコレクションです。空のコレクションに要素を追加するには、EXTENDメソッド(「EXTENDコレクション・メソッド」を参照)を起動します。

null collection(atomically null collectionとも呼ばれる)は存在しません。NULLのコレクションを存在するコレクションに変えるには、空にするかNULL以外の値を代入してコレクションを初期化する必要があります(詳細は「コレクションのコンストラクタ」および「コレクション変数への値の代入」を参照してください)。EXTENDメソッドを使用して、NULLのコレクションを初期化することはできません。

定義される場所

PL/SQLブロック内に定義されるコレクション型はローカル型です。ブロック内でのみ使用可能であり、スタンドアロン・サブプログラムまたはパッケージ・サブプログラム内にブロックがある場合にのみ、データベースに格納されます。(スタンドアロン・サブプログラムおよびパッケージ・サブプログラムの詳細は、ネストしたサブプログラム、パッケージ・サブプログラムおよびスタンドアロン・サブプログラムを参照してください。)

パッケージ仕様部に定義されるコレクション型はパブリック項目です。パッケージ名(package_name.type_name)で修飾することで、パッケージの外から参照できます。パッケージを削除するまでデータベースに格納されます。(パッケージについては、「PL/SQLパッケージ」を参照してください。)

スキーマ・レベルで定義されるコレクション型は、スタンドアロン型です。「CREATE TYPE文」を使用して作成します。「DROP TYPE文」を使用して削除するまでデータベースに格納されます。

ノート:

パッケージ仕様部で定義されたコレクション型は、同一定義のローカル・コレクション型またはスタンドアロン・コレクション型と互換性がありません(例6-37および例6-38を参照)。

ADT属性のデータ型として使用可能かどうか

ADT属性のデータ型にするには、コレクション型がスタンドアロン・コレクション型である必要があります。その他の制限は、「datatypeの制限」を参照してください。

非PL/SQLコンポジット型からPL/SQLコンポジット型への変換

他の言語を使用するコードまたはビジネス・ロジックが存在する場合、通常は配列を変換して、その言語の型をPL/SQLのコレクション型に直接設定できます。たとえば:

非PL/SQLコンポジット型 等価なPL/SQLコンポジット型

ハッシュ表

連想配列

順序付けされていない表

連想配列

集合

ネストした表

バッグ

ネストした表

配列

VARRAY

関連項目:

あるSQLデータ型またはコレクション型の値を別のSQLデータ型またはコレクション型の値に変換するCASTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。