コレクション・メソッドを使用すると、コレクションに関する情報を取得したり、コレクションを変更したりすることができます。この機能は、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』を参照してください。 |