配列(NESTED TABLE)の要素が存在するかどうかを判定するには、EXISTSを使用します。
サンプル
例)EXISTSを使ったサンプル
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 |
CREATE OR REPLACE PROCEDURE p_sample IS --①TYPEを生成 TYPE rec1 IS RECORD( col1 NUMBER(3,0) ,col2 NUMBER(3,0) ); --②TYPEの配列を生成 TYPE tbl1 IS TABLE OF rec1 INDEX BY BINARY_INTEGER; --③を宣言する a tbl1; BEGIN --④TYPEの配列に値を設定する FOR i IN 1..5 LOOP a(i).col1 := i; END LOOP; --⑤2番目の要素を削除する a.DELETE(2); --⑥TYPEの配列から値を取り出して表示する FOR i IN 1..a.COUNT LOOP IF a.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE(a(i).col1); END IF; END LOOP; END; |
- 実行例
- SQL> exec p_sample 1 3 4 5 PL/SQLプロシージャは正常に完了しました。 SQL>
実行前に「set serveroutput on」を実行しておく必要があります。
EXISTSのメソッド
EXISTSメソッドの引数と戻り値は以下の通りです。
.EXISTS(n) | インデックス番号nの要素が存在するかどうか 戻り値 ⇒ true:存在する false:存在しない |
解説
- 配列(NESTED TABLE)ではDELETEで要素を削除してもインデックス番号は振りなおされず、その番号は空き番となります。そのため要素にアクセスする時はEXISTSで判定してからアクセスした方が安全です。
(DELETEされた要素にアクセスすると例外が発生します。)