MULTISET CAST操作

PolarDB PostgreSQL版(兼容Oracle)支持通过MULTISET CAST将查询结果转换为指定集合类型(如嵌套表)。该功能使得查询结果能够灵活地封装为集合结构,从而在PL/SQL程序中执行集合相关操作。

特性与使用场景

  • 灵活的集合构建MULTISET CAST为您提供了一种便捷的方式,将查询结果动态封装为可操作的集合格式。

  • 适用于复杂操作:可广泛应用于在PL/SQL中进行集合过滤、交集、差集等高级功能的操作。

  • 清晰的类型转换:支持将查询结果明确转换为目标集合类型,便于集合操作和变量赋值。

版本限制

仅支持Oracle语法兼容 2.0且内核小版本为2.0.14.17.33.0及以上。

说明

您可在控制台查看内核小版本号,也可以通过SHOW polardb_version;语句查看。如未满足内核小版本要求,请升级内核小版本

语法

CAST(MULTISET(<subquery>) AS <collection_type>)

参数说明

参数

描述

<subquery>

待转换为集合类型的子查询语句。

其返回值需要与目标集合类型兼容。

<collection_type>

目标集合的类型,必须是合法的集合类型。例如嵌套表类型TABLE OF

使用MULTISET将查询结果表示为集合,再通过CAST将其转换为所需的集合类型。

说明

MULTISET CAST操作存在集合约束,请确保目标集合类型与查询结果列的数据类型一致。

示例

此处为您展示如何使用MULTISET CAST将查询结果转换成嵌套表类型,并对结果进行操作。

CREATE OR REPLACE TYPE num_table AS TABLE OF NUMBER;

DECLARE
    nt1 num_table := num_table(1, 2, 3, 4, 5); -- 第一个嵌套表
    nt2 num_table := num_table(4, 5, 6, 7, 8); -- 第二个嵌套表
    intersection_result num_table; -- 用于存储交集结果的嵌套表
BEGIN
    -- 使用 MULTISET CAST 获取查询结果作为嵌套表
    SELECT CAST(MULTISET(
        SELECT * FROM TABLE(nt1)
        INTERSECT
        SELECT * FROM TABLE(nt2)
    ) AS num_table)
    INTO intersection_result
    FROM dual;

    -- 输出集合结果
    DBMS_OUTPUT.PUT_LINE('Intersection of nt1 and nt2:');
    FOR i IN 1 .. intersection_result.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(intersection_result(i));
    END LOOP;
END;

使用嵌套表num_table和集合操作INTERSECT,最终通过MULTISET CAST将结果存储为交集的嵌套表类型。返回结果如下:

Intersection of nt1 and nt2:
5
4