牛骨文教育服务平台(让学习变的简单)
博文笔记

PL/SQL 集合 -- 可变数组

创建时间:2015-01-03 投稿人: 浏览次数:954

-- Start

可变数组是容量可以变化的数组,但不能超过最大容量。和其他语言不同,可变数组的索引从 1 开始。另外我们不能比较两个可变数组,但是可以检查可变数组是否为 NULL。

DECLARE
  -- 定义一个可变数组类型 MY_ARRAY,它的最大容量是100,元素类型是 VARCHAR2
  TYPE MY_ARRAY IS VARRAY(100) OF VARCHAR2(15);
  
  -- 定义一个类型为 MY_ARRAY 的可变数组变量 TEST1, 此时 TEST1 是 NULL
  test1 MY_ARRAY;
  
  -- 定义一个类型为 MY_ARRAY 的可变数组变量 TEST2, 此时 TEST2 是一个空数组
  test2 MY_ARRAY := MY_ARRAY();
  
  -- 定义一个类型为 MY_ARRAY 的可变数组变量 TEST3, 此时 TEST3 是一个有4个元素的数组
  test3 MY_ARRAY := MY_ARRAY("element 1", "element 2", "element 3", "element 4");

BEGIN  
  test3.EXTEND();     -- 添加 1 个 NULL 元素到末尾
  test3.EXTEND(3);    -- 添加 3 个 NULL 元素到末尾
  test3.EXTEND(3, 1); -- 复制元素1的值, 添加 3 个到末尾
  
  DBMS_OUTPUT.PUT_LINE("数组开始元素的索引: " || test3.FIRST());
  DBMS_OUTPUT.PUT_LINE("数组末尾元素的索引: " || test3.LAST());
  DBMS_OUTPUT.PUT_LINE("数组元素的数量: " || test3.COUNT());
  DBMS_OUTPUT.PUT_LINE("数组的容量: " || test3.LIMIT());
  
  DBMS_OUTPUT.PUT_LINE("元素 3 的上一个元素是: " || test3(test3.PRIOR(3)));
  DBMS_OUTPUT.PUT_LINE("元素 3 的下一个元素是: " || test3(test3.NEXT(3)));
  
  IF test3 IS NOT NULL THEN
    DBMS_OUTPUT.PUT_LINE("test3 不是 NULL");
  END IF;
  
  IF test3.EXISTS(3) THEN
    DBMS_OUTPUT.PUT_LINE("存在第 3 个元素");
  END IF;
  
  -- 迭代数组,可变数组从 1 开始
  FOR i IN test3.FIRST()..test3.LAST() LOOP
    DBMS_OUTPUT.PUT_LINE(i || "-" || test3(i));
  END LOOP;

  test3.TRIM();   -- 删除末尾的 1 个元素  
  test3.TRIM(3);  -- 删除末尾的 3 个元素  
  test3.DELETE(); -- 删除所有元素
END;
/

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

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

-- Last Edited on 2015-01-08

-- Created by ShangBo on 2015-01-03

-- End


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。