集合

通过create type语句可以创建集合类型。集合类型分为两种:嵌套表和变长数组。通过create type语句创建的集合类型与包中的集合类型不同点在于:
  1. 不能创建索引表
  2. 可以作为普通过程的返回值和参数(包中的集合仅能用于包中过程的返回值和参数)

语法:

create_collection_type ::=

参数:
TABLE创建的类型为嵌套表,VARRAY创建的类型为变长数组
说明:
创建集合类型的时候会为类型创建同名的构造函数 type_name可以是数据库的内置数据类型,也可以是create type语句创建的类型(包括object type或另一个集合类型) 集合类型也可以作为object type的一个字段的类型,但目前还不支持使用嵌套集合类型的object type创建表 TABLE函数可以把一个集合对象转换为一张虚拟的表

示例:

CREATE OR REPLACE TYPE nt IS TABLE OF INT;
/

CREATE OR REPLACE FUNCTION func_return_nt RETURN nt
IS
    a nt := nt(1,2,3);
BEGIN
    RETURN a;
END;

/

SELECT * FROM table(func_return_nt);
COLUMN_VALUE(int)      |
-----------------------
1                      |
-----------------------
2                      |
-----------------------
3                      |
总数目:3

CREATE OR REPLACE TYPE rec IS OBJECT(a INT, b VARCHAR2);
/

CREATE OR REPLACE TYPE va IS VARRAY(2) OF rec;

/

SELECT * FROM table(va(rec(1, 'a'), rec(2, 'b')));
A(int)      |B(varchar)      |
----------------------------
1           |a               |
----------------------------
2           |b               |
总数目:2