COUNTは、コレクション内の要素数を返します(削除された要素は無視されます。ただし、DELETE操作でプレースホルダーが保持されている場合は例外です)。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
変動配列での使用
変動配列については、COUNTは常にLASTと等しくなります。EXTENDまたはTRIMメソッドを使用して変動配列のサイズを増減すると、COUNTの値が変更されます。
obclient> DECLARE
TYPE oblist IS VARRAY(10) OF INTEGER;
t oblist := OBLIST(2,4,6,8,10);
PROCEDURE print_count_and_last IS
BEGIN
DBMS_OUTPUT.PUT('t.COUNT = ' || t.COUNT || ', ');
DBMS_OUTPUT.PUT_LINE('t.LAST = ' || t.LAST);
END print_count_and_last;
BEGIN
print_count_and_last;
t.EXTEND(2);
print_count_and_last;
t.TRIM(4);
print_count_and_last;
END;
/
Query OK, 0 rows affected
t.COUNT = 5, t.LAST = 5
t.COUNT = 7, t.LAST = 7
t.COUNT = 3, t.LAST = 3
上記の例では、変動配列変数を宣言し、初期化して4つの要素を代入します。それぞれEXTEND(3)とTRIM(5)を実行した後、変動配列のCOUNTとLASTの値を出力します。
ネストテーブルでの使用
ネストテーブルについては、COUNTはLASTと等しくなります。ただし、ネストテーブルの途中から要素を削除する場合は、COUNTはLASTより小さくなります。
obclient> DECLARE
TYPE oblist IS TABLE OF INTEGER;
t oblist := OBLIST(2,4,6,8,10);
PROCEDURE print_count_and_last IS
BEGIN
DBMS_OUTPUT.PUT('t.COUNT = ' || t.COUNT || ', ');
DBMS_OUTPUT.PUT_LINE('t.LAST = ' || t.LAST);
END print_count_and_last;
BEGIN
print_count_and_last;
t.EXTEND(2); --末尾に2つのNULL要素を追加
print_count_and_last;
t.DELETE(3); --3番目の要素を削除
print_count_and_last;
FOR i IN 1..8 LOOP
IF t.EXISTS(i) THEN
IF t(i) IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('t(' || i || ') = ' || t(i));
ELSE
DBMS_OUTPUT.PUT_LINE('t(' || i || ') = NULL');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('t(' || i || ') does not exist');
END IF;
END LOOP;
END;
/
Query OK, 0 rows affected
t.COUNT = 5, t.LAST = 5
t.COUNT = 7, t.LAST = 7
t.COUNT = 6, t.LAST = 7
t(1) = 2
t(2) = 4
t(3) does not exist
t(4) = 8
t(5) = 10
t(6) = NULL
t(7) = NULL
t(8) does not exist
上記の例では、ネストテーブル変数を宣言し、初期化して5つの要素を代入します。その後、末尾に2つのNULL要素を追加し、3番目の要素を削除して、ネストテーブルのCOUNTとLASTの値を更新します。最後に、例の1番目から8番目までの要素の状態を出力します。