配列(VARRAY)を生成するサンプルです。
サンプル
例)配列(VARRAY)を初期化・値セット・値取出しを行うサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
CREATE OR REPLACE PROCEDURE P_SAMPLE_VARRAY IS --①VARCHAR2(20)、要素数10の配列を定義 TYPE varr IS VARRAY(10) OF VARCHAR2(20); --②上記で定義した配列を宣言する ar varr := varr(); --ar varr := varr('hoge1', 'hoge2', 'hoge3'); --↑このように宣言と同時に値をセットする事も可能。 BEGIN --②5番目まで初期化する ar.extend(5); --③インデックス1~4に値をセットする ar(1) := 'hoge1'; ar(2) := 'hoge2'; ar(3) := 'hoge3'; ar(4) := 'hoge4'; --④COUNTを出力してみる DBMS_OUTPUT.PUT_LINE('COUNT数:' || ar.COUNT); --⑤全ての要素を取得して出力してみる FOR i IN 1..ar.COUNT LOOP DBMS_OUTPUT.PUT_LINE(ar(i)); END LOOP; END; / |
- 実行例
- SQL> exec P_SAMPLE_VARRAY COUNT数:5 hoge1 hoge2 hoge3 hoge4 PL/SQLプロシージャは正常に完了しました。 SQL>
実行前に「set serveroutput on」を実行しておく必要があります。
配列(VARRAY)のメソッド
配列(VARRAY)には、以下のようなメソッドがあります。
.FIRST | 初期化された最初のインデックス番号を返す ※要素が1件も無い場合はNULLが返る |
.LAST | 初期化された最後のインデックス番号を返す ※要素が1件も無い場合はNULLが返る |
.COUNT | 初期化された要素数を返す ※1件も初期化されていない場合は0が返る |
.EXISTS(n) | インデックス番号nの要素が初期化されているかどうか true:初期化されている false:初期化されていない |
.DELETE | 要素を全て削除する |
.EXTEND | コレクションの要素を1件初期化する |
.EXTEND(n) | コレクションの要素をn件初期化する |
.NEXT(n) | インデックス番号nの次のインデックス番号を返す |
.PRIOR(n) | インデックス番号nの直前のインデックス番号を返す |
.TRIM | 一番最後の要素を1件クリアする ※初期化自体もクリアされる |
.TRIM(n) | 一番最後の要素からn件クリアする ※初期化自体もクリアされる |
.LIMIT | VARRAYの最大要素数を返す ※宣言時に指定した値です。 |
解説
- VARRAY配列は宣言時に最大要素数を指定する必要があり、宣言後に最大要素数を拡張することはできません。
- 要素に値をセットする前には、必ずEXTENDで初期化する必要があります。
(※宣言と同時に値をセットした場合を除く)