NESTED TABLE配列の要素を削除するには、DELETEを使用します。
サンプル
例)NESTED TABLE配列の2番目の要素を削除する
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」を実行しておく必要があります。
DELETEのメソッド
DELETEメソッドは、以下のような引数を指定できます。
.DELETE | 要素を全て削除する |
.DELETE(n) | インデックス番号nの要素を削除する |
.DELETE(n, m) | インデックス番号n~mの要素を削除する |
解説
- DELETEで要素を削除しても、インデックス番号は振りなおされず、その番号は空き番となります。
- DELETEで削除したインデックスにアクセスするとエラーとなるので、EXISTSで判定してからアクセスすると安全です。(上記サンプルの26行目参照)