PL/SQL コレクション型
それぞれ一次元の配列である。
連想配列
- 添え字の型定義が可能。(数値 or 文字列)
- 添え字は -2^21~2^31 まで使用可能。
- 添え字は連続している必要はない。(疎結合)
- 配列サイズは自動拡張
宣言
TYPE array IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
arrayと言う名前のVARCHAR2型の配列を作る。添え字は数値。
TYPE array IS TABLE OF VARCHAR2(10) INDEX BY VARCHAR2(5);
arrayと言う名前のVARCHAR2型の配列を作る。添え字は文字列。
初期化
array_List array; array_List(1) := 'aaa'; array_List(9) := 'bbb'; array_List(300) := 'ccc';
添え字を文字列として定義するとこういうことが出来る。
array_List('ほげ') := 'hoge'; array_List('ふー') := 'foo'; array_List('bar') := 'bar';
ネステッド・テーブル
- 添え字は 1 ~ 2^31 まで使用可能。
宣言
TYPE array IS TABLE OF VARCHAR2(10) NOT NULL;
- NULLを許可しないVARCHAR2の配列。
- NOT NULLは省略可能。(NULLを許可する場合)
初期化
array_List array := array('aaa', 'bbb', 'ccc'); --初期化付宣言 null_List array; --宣言のみ null_List := array(); --初期化 null_List.EXTEND(100); --添え字100を作成 null_List(100); := 'aaa'; --代入
拡張
array.EXTEND(100); array(100) := 'aaa';
arrayの要素100を拡張し、aaaを代入する。(未拡張領域に対しての代入はエラー)
VARRAY
可変長配列
宣言
TYPE array IS VARRAY(100) OF VARCHAR2(10) NOT NULL;
要素が最大100あるVARCHAR2の配列。NULLを許可しない。
初期化、拡張
array_List array := array('aaa', 'bbb', 'ccc'); --初期化付宣言 null_List array; null_List.EXTEND(50); --配列を +50 初期化。
ネストされたコレクション
CREATE TYPE hoge IS TABLE OF VARCHAR2(100); CREATE TYPE moge IS TABLE OF hoge;
例2:
DECLARE TYPE hoge IS RECORD( id INTEGER, name VARCHAR2(200) ); TYPE array IS TABLE OF hoge; list array; --hoge型のレコードを持つTABLE。 BEGIN list := array(); --初期化 list.EXTEND(1); --1レコード目。拡張し作成。 list(1).id := 1; --1レコード目のid項目に1を代入。 list(1).name := 'hoge'; --1レコード目のname項目にhogeを代入。 list.EXTEND(2); list(2).id := 2; list(2).name := 'moge'; --以下同文... FOR i IN 1 .. 2 LOOP DBMS_OUTPUT.PUT_LINE('id:'||list(i).id||' name:'||list(i).name); END LOOP; END; /