5.1 コレクション型
PL/SQLには、連想配列、VARRAY (可変サイズの配列)およびネストした表の3つのコレクション型があります。
表5-1に、それぞれの類似点と相違点の概要を示します。
表5-1 PL/SQLコレクション型
| コレクション型 | 要素の数 | 索引タイプ | 密か疎か | 未初期化時のステータス | 定義される場所 | ADT属性のデータ型として使用可能かどうか |
|---|---|---|---|---|---|---|
|
連想配列(または索引付き表) |
指定なし |
文字列または |
密または疎のいずれか |
なし |
PL/SQLブロック内またはパッケージ内 |
不可 |
|
|
指定されている |
整数 |
常に密 |
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文」を使用して削除するまでデータベースに格納されます。
ADT属性のデータ型として使用可能かどうか
ADT属性のデータ型にするには、コレクション型がスタンドアロン・コレクション型である必要があります。その他の制限は、「datatypeの制限」を参照してください。
非PL/SQLコンポジット型からPL/SQLコンポジット型への変換
他の言語を使用するコードまたはビジネス・ロジックが存在する場合、通常は配列を変換して、その言語の型をPL/SQLのコレクション型に直接設定できます。たとえば:
| 非PL/SQLコンポジット型 | 等価なPL/SQLコンポジット型 |
|---|---|
|
ハッシュ表 |
連想配列 |
|
順序付けされていない表 |
連想配列 |
|
集合 |
ネストした表 |
|
バッグ |
ネストした表 |
|
配列 |
|
関連項目:
あるSQLデータ型またはコレクション型の値を別のSQLデータ型またはコレクション型の値に変換するCASTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。