DB2 10.5 for Linux, UNIX, and Windows

集合方法 (PL/SQL)

集合方法可用于获取关于集合的信息或者修改集合。

在尝试运行表 1 中的示例之前,应该执行下列命令。
db2set DB2_COMPATIBILITY_VECTOR=ORA
   db2stop
db2start
db2 connect to mydb
MYDB 数据库包含一个表 EMP,该表包含一列 ENAME(定义为 VARCHAR(10)):
db2 select * from emp

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

  5 record(s) selected.
表 1. DB2 数据服务器在 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) 从关联数组中除去所有从 n1n2 的元素。不能从 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”。