コレクション・メソッド (PL/SQL)

コレクション・メソッドを使用すると、コレクションに関する情報を取得したり、コレクションを変更したりすることができます。この機能は、Db2® Warehouse on Cloud 管理対象サービスのエントリー・プランには適用されません。

以下に示すように、MYDB データベースには 1 つの表 EMP が存在し、この表には 1 つの列 ENAME (VARCHAR(10) として定義) が含まれます。

db2 select * from emp

ENAME
----------
Curly
Larry
Moe
Shemp
Joe

  5 record(s) selected.
表 1. PL/SQL コンテキスト内で データ・サーバーによってサポート (または許容) されるコレクション・メソッド
コレクション・メソッド 説明
COUNT コレクション内のエレメントの数を返します。
CREATE PACKAGE foo
AS
    TYPE sparse_arr_typ IS TABLE OF NUMBER
      INDEX BY BINARY_INTEGER;
END;
/

SET SERVEROUTPUT ON
/

DECLARE
    sparse_arr      foo.sparse_arr_typ;
BEGIN
    sparse_arr(-10)   := -10;
    sparse_arr(0)     := 0;
    sparse_arr(10)    := 10;
    DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
      sparse_arr.COUNT);
END;
/
DELETE コレクションからすべてのエレメントを削除します。
CREATE PACKAGE foo
AS
    TYPE names_typ IS TABLE OF VARCHAR2(10)
      INDEX BY BINARY_INTEGER;
END;
/

SET SERVEROUTPUT ON
/

DECLARE
    actor_names      foo.names_typ;

BEGIN

    actor_names(1) := 'Chris';
    actor_names(2) := 'Steve';
    actor_names(3) := 'Kate';
    actor_names(4) := 'Naomi';
    actor_names(5) := 'Peter';
    actor_names(6) := 'Philip';
    actor_names(7) := 'Michael';
    actor_names(8) := 'Gary';

    DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
      actor_names.COUNT);

    actor_names.DELETE(2);
    DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
      actor_names.COUNT);

    actor_names.DELETE(3, 5);
    DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
      actor_names.COUNT);

    actor_names.DELETE;
    DBMS_OUTPUT.PUT_LINE('COUNT: ' ||
      actor_names.COUNT);

END;
/
DELETE (n) 連想配列からエレメント n を削除します。 VARRAY コレクション・タイプから個々のエレメントを削除することはできません。 『DELETE』を参照してください。
DELETE (n1, n2) n1 から n2 までのエレメントすべてを、連想配列から削除します。 VARRAY コレクション・タイプから個々のエレメントを削除することはできません。 『DELETE』を参照してください。
EXISTS (n) 指定したエレメントが存在する場合は、TRUE を返します。
CREATE PACKAGE foo
AS
    TYPE emp_arr_typ IS VARRAY(5) OF VARCHAR2(10);
END;
/

SET SERVEROUTPUT ON
/

DECLARE
    emp_arr         foo.emp_arr_typ;
    CURSOR emp_cur IS SELECT ename FROM emp
      WHERE ROWNUM <= 5;
    i               INTEGER := 0;
BEGIN
    FOR r_emp IN emp_cur LOOP
        i := i + 1;
        emp_arr.EXTEND;
        emp_arr(i) := r_emp.ename;
    END LOOP;
    emp_arr.TRIM;
    FOR j IN 1..5 LOOP
        IF emp_arr.EXISTS(j) = true THEN
            DBMS_OUTPUT.PUT_LINE(emp_arr(j));
        ELSE
            DBMS_OUTPUT.PUT_LINE('THIS ELEMENT
              HAS BEEN DELETED');
        END IF;
    END LOOP;
END;
/
EXTEND コレクションに NULL エレメントを 1 つだけ付加します。 『EXISTS (n)』を参照してください。
EXTEND (n) コレクションに NULL エレメントを n 個付加します。 『EXISTS (n)』を参照してください。
EXTEND (n1, n2) コレクションに、n2 番目のエレメントのコピーを n1 個付加します。 『EXISTS (n)』を参照してください。
FIRST コレクション内にある最小の索引番号を返します。
CREATE PACKAGE foo
AS
    TYPE emp_arr_typ IS VARRAY(5) OF VARCHAR2(10);
END;
/

SET SERVEROUTPUT ON
/

DECLARE
    emp_arr         foo.emp_arr_typ;
    CURSOR emp_cur IS SELECT ename FROM emp
      WHERE ROWNUM <= 5;
    i               INTEGER := 0;
    k               INTEGER := 0;
    l               INTEGER := 0;
BEGIN
    
    FOR r_emp IN emp_cur LOOP
        i := i + 1;
        emp_arr(i) := r_emp.ename;
    END LOOP;

    -- Use FIRST and LAST to specify the lower and
    --   upper bounds of a loop range:
    FOR j IN emp_arr.FIRST..emp_arr.LAST LOOP
        DBMS_OUTPUT.PUT_LINE(emp_arr(j));
    END LOOP;

    -- Use NEXT(n) to obtain the subscript of
    --   the next element:
    k := emp_arr.FIRST;
    WHILE k IS NOT NULL LOOP
        DBMS_OUTPUT.PUT_LINE(emp_arr(k));
        k := emp_arr.NEXT(k);
    END LOOP;

    -- Use PRIOR(n) to obtain the subscript of
    --   the previous element:
    l := emp_arr.LAST;
    WHILE l IS NOT NULL LOOP
        DBMS_OUTPUT.PUT_LINE(emp_arr(l));
        l := emp_arr.PRIOR(l);
    END LOOP;

    DBMS_OUTPUT.PUT_LINE('COUNT: ' || emp_arr.COUNT);

    emp_arr.TRIM;
    DBMS_OUTPUT.PUT_LINE('COUNT: ' || emp_arr.COUNT);

    emp_arr.TRIM(2);
    DBMS_OUTPUT.PUT_LINE('COUNT: ' || emp_arr.COUNT);

    DBMS_OUTPUT.PUT_LINE('Max. no. elements = ' ||
      emp_arr.LIMIT);

END;
/
LAST コレクション内にある最大の索引番号を返します。 『FIRST』を参照してください。
LIMIT VARRAY の場合にはエレメントの最大数、ネストした表の場合には NULL を返します。 『FIRST』を参照してください。
NEXT (n) 指定した索引の直後に位置するエレメントの索引番号を返します。 『FIRST』を参照してください。
PRIOR (n) 指定した索引の直前に位置するエレメントの索引番号を返します。 『FIRST』を参照してください。
TRIM コレクションの末尾から、エレメントを 1 つだけ削除します。 連想配列コレクション・タイプからエレメントをトリムすることはできません。 『FIRST』を参照してください。
TRIM (n) コレクションの末尾から、エレメントを n 個削除します。 連想配列コレクション・タイプからエレメントをトリムすることはできません。 『FIRST』を参照してください。