PL/SQL 集合 -- 关联数组

-- Start

关联数组(Associative Array)其实就是一个 MAP,键的类型可以是 VARCHAR2, VARCHAR, STRING, LONG 或 PLS_INTEGER。另外我们不能比较两个关联数组或检查关联数组是否为 NULL。

DECLARE
  -- 定义一个关联数组类型 MY_MAP,键的类型是 PLS_INTEGER,值得类型是 VARCHAR2
  TYPE MY_MAP IS TABLE OF VARCHAR2(15) INDEX BY PLS_INTEGER;
  
  -- 定义一个类型为 MY_MAP 的关联数组变量 test1
  test1 MY_MAP;
  
  i PLS_INTEGER;
BEGIN  
  -- 赋值
  test1(1) := 'Value 1';
  test1(2) := 'Value 2';
  test1(3) := 'Value 3';
  test1(4) := 'Value 4';
  test1(5) := 'Value 5';
  
  DBMS_OUTPUT.PUT_LINE('最小的键是: ' || test1.FIRST());
  DBMS_OUTPUT.PUT_LINE('最大的键是: ' || test1.LAST());
  DBMS_OUTPUT.PUT_LINE('关联数组的数量: ' || test1.COUNT());
  DBMS_OUTPUT.PUT_LINE('关联数组的容量: ' || test1.LIMIT());
  DBMS_OUTPUT.PUT_LINE('键值3 的上一个键是: ' || test1.PRIOR(3));
  DBMS_OUTPUT.PUT_LINE('键值3 的下一个键是: ' || test1.NEXT(3));
  
  -- 迭代关联数组
  i := test1.FIRST();
  WHILE i IS NOT NULL LOOP
    DBMS_OUTPUT.PUT_LINE('Key is ' || i || ', Value is ' || test1(i));
    i := test1.NEXT(i);
  END LOOP;

  test1.DELETE(2);    -- 删除第 2 个键和值
  test1.DELETE(3, 5); -- 删除第 3 到第 5 个键和值
  test1.DELETE();     -- 删除所有键和值
END;
/


--更多参见:Oracle PL/SQL 精萃

-- 声明:转载请注明出处

-- Last Edited on 2015-01-08

-- Created by ShangBo on 2015-01-03

-- End


你可能感兴趣的:(oracle,sql,plsql)