13.11 コレクション変数の宣言

コレクション変数はコンポジット変数であり、要素と呼ばれるその内部コンポーネントはデータ型が同じです。

コレクション変数の値およびその要素の値は変更可能です。

コレクション全体は、その名前によって参照します。コレクションの要素を参照するには、構文collection(index)を使用します。

PL/SQLには次の3種類のコレクション型があります。

  • 連想配列(以前のPL/SQL表または索引付き表)

  • 可変サイズの配列(VARRAY)

  • ネストした表

連想配列は、文字列型またはPLS_INTEGERで索引付けできます。VARRAYおよびネストした表は、整数で索引付けできます。

コレクション変数は、次のいずれかの方法で作成できます。

  • コレクション型を定義し、次にその型の変数を宣言します。

  • 事前に宣言されているコレクション変数と同じ型のコレクション変数を宣言するには、%TYPEを使用します。

注意:

このトピックの内容は、PL/SQLブロックまたはパッケージ内で定義するコレクション型に適用されます。このコレクション型は、CREATE TYPE文を使用して作成するスタンドアロン・コレクション型とは異なります。

PL/SQLブロックまたはパッケージでは、3つすべてのコレクション型を定義できます。CREATE TYPE文を使用した場合、ネストした表型およびVARRAY型は作成できますが、連想配列型は作成できません。

ここでのトピック

構文

collection_type_definition ::=

セマンティクス

collection_type_definition

type

定義するコレクション型の名前。

assoc_array_type_def

連想配列の型定義。

assoc_array_type_defの制限

ブロック、サブプログラム、パッケージ仕様部、またはパッケージ本体の宣言部にのみ記述できます。

datatype

連想配列の要素のデータ型。datatypeには、REF CURSORを除く任意のPL/SQLデータ型を指定できます。

NOT NULL

連想配列のすべての要素にNOT NULL制約を指定します。この制約の詳細は、「NOT NULL制約」を参照してください。

{ PLS_INTEGER | BINARY_INTEGER }

連想配列の索引のデータ型がPLS_INTEGERであることを指定します。

{ VARCHAR2 | VARCHAR | STRING } (v_size)

連想配列の索引のデータ型が、v_sizeの長さのVARCHAR2(またはそのサブタイプのVARCHARまたはSTRING)であることを指定します。

連想配列の要素には、TO_CHARファンクション(『Oracle Database SQL言語リファレンス』を参照)でVARCHAR2に変換できる任意のデータ型の値を移入できます。

注意:

文字列で索引付けされている連想配列は、各国語サポート(NLS)パラメータの影響を受ける可能性があります。詳細は、「文字列で索引付けされている連想配列に影響を与えるNLSパラメータ値」を参照してください。

LONG

連想配列の索引のデータ型がLONG(VARCHAR2(32760)と等価)であることを指定します。

注意:

LONGは、既存のアプリケーションとの下位互換性のためにのみサポートされています。新しいアプリケーションではVARCHAR2(32760)を使用してください。

type_attribute、rowtype_attribute

連想配列の索引のデータ型が、%ROWTYPEまたは%TYPEのいずれかで指定されたデータ型であることを指定します。このデータ型はPLS_INTEGERBINARY_INTEGERまたはVARCHAR2(v_size)を表している必要があります。

varray_type_def

可変サイズの配列の型定義。

size_limit

VARRAYに格納できる要素の最大数。size_limitは、1から2147483647の範囲の整数リテラルである必要があります。

datatype

VARRAYの要素のデータ型。datatypeには、REF CURSORを除く任意のPL/SQLデータ型を指定できます。

NOT NULL

VARRAYのすべての要素にNOT NULL制約を指定します。この制約の詳細は、「NOT NULL制約」を参照してください。

nested_table_type_def

ネストした表の型定義。

datatype

ネストした表の要素のデータ型。datatypeには、REF CURSORまたはNCLOBを除く任意のPL/SQLデータ型を指定できます。

datatypeがスカラー型である場合、ネストした表にはCOLUMN_VALUEと呼ばれるスカラー型の列が1つ存在します。

datatypeがADTである場合、ネストした表の列はADTの名前および属性と一致します。

NOT NULL

ネストした表のすべての要素にNOT NULL制約を指定します。この制約の詳細は、「NOT NULL制約」を参照してください。

collection_variable_decl

new_collection_var

宣言するコレクション変数の名前。

assoc_array_type

事前に定義されている連想配列型の名前。new_collection_varのデータ型です。

varray_type

事前に定義されているVARRAY型の名前。new_collection_varのデータ型です。

nested_table_type

事前に定義されているネストした表型の名前。new_collection_varのデータ型です。

collection_constructor

new_collection_varのデータ型のコレクション・コンストラクタ。new_collection_varの初期値を指定します。

collection_var_1

new_collection_varと同じデータ型の事前に宣言されているコレクション変数の名前。new_collection_varの初期値を指定します。

注意:

collection_var_1new_collection_varは、同じ型の要素を持っているだけでなく、同じデータ型を持っている必要があります。

collection_var_2

事前に宣言されているコレクション変数の名前。

%TYPE

%TYPE属性を参照してください。

  • 例5-1文字列で索引付けされている連想配列

  • 例5-2PLS_INTEGERで索引付けされている連想配列を戻すファンクション

  • 例5-4VARRAY (可変サイズの配列)

  • 例5-5ローカル型のネストした表

  • 例5-132次元のVARRAY (VARRAYのVARRAY)

  • 例5-14ネストした表のネストした表と整数のVARRAYのネストした表