配列(NESTED TABLE)の要素数を取得するには、COUNTを使用します。
サンプル
例)NESTED TABLEの要素数を取得する
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 33 34 35 36 37 38 39 |
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..10 LOOP a(i).col1 := i; a(i).col2 := i*2; END LOOP; --⑤件数を取得して表示する(要素削除前) DBMS_OUTPUT.PUT_LINE('要素数:' || a.COUNT); DBMS_OUTPUT.PUT_LINE('一番初めのインデックス番号:' || a.FIRST); DBMS_OUTPUT.PUT_LINE('一番最後のインデックス番号:' || a.LAST); --⑥要素を削除してみる a.DELETE(1); --インデックス=1の要素を削除 a.DELETE(5); --インデックス=5の要素を削除 a.DELETE(10); --インデックス=10の要素を削除 --⑦件数を取得して表示する(要素削除後) DBMS_OUTPUT.PUT_LINE('要素数:' || a.COUNT); DBMS_OUTPUT.PUT_LINE('一番初めのインデックス番号:' || a.FIRST); DBMS_OUTPUT.PUT_LINE('一番最後のインデックス番号:' || a.LAST); END; / |
- 実行例
- SQL> exec p_sample 要素数:10 一番初めのインデックス番号:1 一番最後のインデックス番号:10 要素数:7 一番初めのインデックス番号:2 一番最後のインデックス番号:9 PL/SQLプロシージャが正常に完了しました。 SQL>
実行前に「set serveroutput on」を実行しておく必要があります。
メソッド
上記サンプルのメソッドについてです。
.COUNT | コレクションの要素数を返す ※要素が1件も無い場合は0が返る |
.FIRST | 最初に要素が存在するインデックス番号を返す ※要素が1件も無い場合はNULLが返る |
.LAST | 最後に要素が存在するインデックス番号を返す ※要素が1件も無い場合はNULLが返る |
解説
- COUNTは、NESTED TABLEで初期化された要素の件数を取得します。
- なので、上記サンプルのように最後のインデックスとCOUNT数は一致するとは限りません。