Varrays¶
</ div>
varray または variable-size配列*は、正の整数を値に関連付けるコレクションのタイプです。多くの点で、ネストされたテーブルに似ています。
VARRAYには次の特性があります。
varray type は、最大サイズ制限とともに定義する必要があります。 VARRAY型が定義された後、そのVARRAY型の varray変数*を宣言できます。データ操作は、VARRAY変数、または単に「varray」を使用して行われます。 VARRAYの要素の数は、VARRAY型定義で設定された最大サイズ制限を超えることはできません。
VARRAY変数が宣言されている場合、VARRAYは最初は存在しません( nullコレクションです)。 null VARRAYは、コンストラクタ*で初期化する必要があります。また、代入文を使用してVARRAYを初期化することもできます。代入文の右側は、同じタイプの初期化されたVARRAYです。
キーは正の整数です。
コンストラクタは、VARRAYの要素数を設定します。これは、最大サイズ制限を超えてはなりません。
EXTENDメソッドは、最大サイズ制限までVARRAYに要素を追加できます。収集方法の詳細については、Collection Methodsを参照してください。ネストした表とは異なり、VARRAYはスパースにできません-キーへの値の割り当てにギャップはありません。
初期化または拡張されたサイズを超えて、最大サイズ制限内でvarray要素をリファレンスしようとすると、
SUBSCRIPT_BEYOND_COUNT例外が発生します。VARRAY要素を最大サイズ制限を超えてリファレンスしようとしたり、VARRAYを最大サイズ制限を超えて拡張しようとすると、
SUBSCRIPT_OUTSIDE_LIMIT例外が発生します。
TYPE IS VARRAYステートメントは、SPLプログラムの宣言セクション内でVARRAY型を定義するために使用されます。
TYPE <varraytype> IS { VARRAY | VARYING ARRAY }(<maxsize>)
* OF { <datatype> | <objtype> };
varraytypeは、VARRAY型に割り当てられた識別子です。
datatypeは、VARCHAR2やNUMBERなどのスカラデータ型です。
maxsizeは、そのタイプのVARRAYで許可される要素の最大数です。
objtypeは、以前に定義されたオブジェクトタイプです。
CREATE TYPEコマンドを使用して、データベース内のすべてのSPLプログラムで使用可能なVARRAYタイプを定義できます。
VARRAYを使用オーダーには、そのVARRAY型の変数を宣言する必要があります。以下は、VARRAY変数を宣言するための構文です。
<varray> <varraytype>
varrayは、VARRAYに割り当てられた識別子です。
varraytypeは、以前に定義されたVARRAY型の識別子です。
VARRAYは、VARRAY型のコンストラクタを使用して初期化されます。
<varraytype> ([ { <expr1> | NULL } [, { <expr2> | NULL } ]
* [, ...] ])
varraytypeは、VARRAY型と同じ名前を持つVARRAY型のコンストラクタの識別子です。
expr1, expr2, …は、VARRAYの要素型と型互換性のある式です。
NULLが指定されている場合、対応する要素はnullに設定されます。パラメータリストが空の場合、空のVARRAYが返されます。これは、VARRAYに要素がないことを意味します。
VARRAYがオブジェクト型から定義されている場合、exprnはそのオブジェクト型のオブジェクトを結果必要があります。オブジェクトは、ファンクションの結果値またはオブジェクト型のコンストラクタの結果値になります。オブジェクトは、同じVARRAYタイプの別のVARRAYの要素にすることもできます。
EXISTS以外のコレクションメソッドが初期化されていないvarrayに適用されると、COLLECTION_IS_NULL例外がスローされます。収集方法の詳細については、Collection
Methodsを参照してください。
以下は、VARRAYのコンストラクタの例です。
DECLARE
* TYPE varray_typ IS VARRAY(2) OF CHAR(1);
* v_varray varray_typ := varray_typ('A','B');
VARRAYの要素は、次の構文を使用して被参照れます。
<varray>(<n>)[<.element> ]
varrayは、以前に宣言されたVARRAYの識別子です。
nは正の整数です。
varrayのVARRAY型がオブジェクト型から定義されている場合、[.element ]はVARRAY型の定義元のオブジェクト型内の属性をリファレンスする必要があります。または、[.element ].を省略して、オブジェクト全体を被参照できます。
以下は、4つの要素があることがわかっているVARRAYの例です。
DECLARE
* TYPE dname_varray_typ IS VARRAY(4) OF VARCHAR2(14);
* dname_varray dname_varray_typ;
* CURSOR dept_cur IS SELECT dname FROM dept ORDER BY dname;
* i INTEGER := 0;
BEGIN
* dname_varray := dname_varray_typ(NULL, NULL, NULL, NULL);
* FOR r_dept IN dept_cur LOOP
* i := i + 1;
* dname_varray(i) := r_dept.dname;
* END LOOP;
* DBMS_OUTPUT.PUT_LINE('DNAME');
* DBMS_OUTPUT.PUT_LINE('----------');
* FOR j IN 1..i LOOP
* DBMS_OUTPUT.PUT_LINE(dname_varray(j));
* END LOOP;
END;
上記の例では、次の出力が生成されます。
DNAME
----------
ACCOUNTING
OPERATIONS
RESEARCH
SALES