콜렉션 메소드(PL/SQL)

콜렉션 메소드는 콜렉션에 대한 정보를 얻거나 콜렉션을 수정하는 데 사용할 수 있습니다. 이 기능은 Db2® Warehouse on Cloud 관리 서비스의 엔트리 플랜에는 적용되지 않습니다.

MYDB 데이터베이스에는 하나의 컬럼 ENAME(VARCHAR(10)으로 정의됨)이 있는 하나의 테이블 EMP가 있습니다.
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) 요소를 추가합니다. EXISTS (n)를 참조하십시오.
EXTEND (n) 콜렉션에 n개의 널(NULL) 요소를 추가합니다. 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 콜렉션의 끝에서 하나의 요소를 제거합니다. 연관 배열 콜렉션 유형에서 요소를 자를 수 없습니다. FIRST를 참조하십시오.
TRIM (n) 콜렉션 끝에서 n개의 요소를 제거합니다. 연관 배열 콜렉션 유형에서 요소를 자를 수 없습니다. FIRST를 참조하십시오.