コレクション型
PL/SQLには、連想配列、VARRAY
(可変サイズの配列)およびネストした表の3つのコレクション型があります。
表6-1に、それぞれの類似点と相違点の概要を示します。
表6-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言語リファレンス』を参照してください。