集合类型构造函数

集合类型构造器(constructor)是系统定义的与集合类型同名的函数,它返回该类型的集合。目前,只有变长数组和嵌套表支持使用构造函数来初始化集合变量。

语法

type_name ( [ value [, value ]... ] )

如果参数列表为空,则构造函数返回一个空集合。否则,构造函数返回包含指定元素的集合。由于变长数组类型具有最大长度的限制,因此构造函数包含的值的个数不能超过最大长度。否则,数据库不会将其识别为构造函数,而是尝试将其视为一个普通函数。

示例

DECLARE
  TYPE varray_type IS VARRAY(2) OF INT;
  v varray_type := varray_type(1, 2, 3);
BEGIN
END;

结果显示如下:

ERROR:  function varray_type(integer, integer, integer) does not exist
LINE 1: varray_type(1, 2, 3)
        ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  varray_type(1, 2, 3)
CONTEXT:  PL/SQL function inline_code_block line 4 during statement block local variable initialization

以下示例展示将集合变量初始化为空,以及初始化为包含特定元素:

DECLARE
  TYPE Friend IS VARRAY(4) OF VARCHAR(10);
  good_friend Friend := Friend();  -- 初始化为空
 
  PROCEDURE print_friend (heading VARCHAR) -- 局部过程
  IS
  BEGIN
    RAISE NOTICE '%', heading;
 
    IF good_friend.COUNT = 0 THEN
      RAISE NOTICE 'Empty';
    ELSE 
      FOR i IN 1..2 LOOP
        RAISE NOTICE '%.%', i, good_friend(i);
      END LOOP;
    END IF;
 
    RAISE NOTICE '---'; 
  END;
 
BEGIN
  print_friend('Friend:');
  good_friend := Friend('Zhang', 'Wu'); -- 初始化为指定值
  print_friend('Friend:');
END;

结果显示如下:

NOTICE:  Friend:
NOTICE:  Empty
NOTICE:  ---
NOTICE:  Friend:
NOTICE:  1.Zhang
NOTICE:  2.Wu
NOTICE:  ---
DO