在集合子查询中指定 ITEM 关键字

当子查询的投影列表包含单个表达式时, 可以用 ITEM 关键字作为子查询的投影列表的开始以指定 MULTISET 的元素类型与子查询结果的数据类型相匹配。换言之,当包括 ITEM 关键字时,数据库服务器不在投影列表两端放置行包装器。例如:如果子查询(紧跟在 MULTISET 关键字之后)返回 INT 值,集合子查询具有类型 MULTISET(INT NOT NULL)。

假设您创建接受类型为 MULTISET(INT NOT NULL)的参数的函数 int_func()。下列查询显示将具有 INT 值的行转换为 MULTISET 并将集合子查询用作函数 int_func() 中的参数的集合子查询。

图: 查询

EXECUTE FUNCTION int_func(MULTISET(SELECT ITEM int_col
          FROM tab1
          WHERE int_col BETWEEN 1 AND 10));

该查询在子查询中包括 ITEM 关键字,因此将查询返回的 int_col 值转换为类型为 MULTISET(INT NOT NULL)的集合。没有 ITEM 关键字,集合子查询将返回类型为 MULTISET(ROW(a INT) NOT NULL)的集合。