1

我有一个数据库表,其中有一个名为“node_names”的列,它是用户定义的 VARRAY 类型。我的数据库表中有记录已用空 VARRAY 填充了“node_names”列。

这是一些尝试识别空节点名称的 PL/SQL。它抱怨 IS EMPTY 子句的使用:PLS-00306:调用“IS EMPTY”时参数的数量或类型错误。

DECLARE
    x NUMBER := 1;
    CURSOR c1 is select node_names from ahf_definition;
BEGIN
FOR node_names_rec in c1
    LOOP
        IF node_names_rec.node_names IS EMPTY THEN
            INSERT INTO foo VALUES (x, 'empty nodes');
        ELSE
            INSERT INTO foo VALUES (x, 'nodes');
    END IF;
    x := x + 100;
END LOOP;
COMMIT;
END;

如何编写一个 SQL 查询来返回“node_names”VARRAY 为空的所有记录?

4

1 回答 1

4

IS EMPTY 适用于嵌套表。您可以使用COUNTfor a VARRAY,但只能在您的 PL/SQL 块内使用(据我所知):

DECLARE
    x NUMBER := 1;
    CURSOR c1 is select node_names from ahf_definition;
BEGIN
FOR node_names_rec in c1
    LOOP
        IF node_names_rec.node_names IS NULL
            OR node_names_rec.node_names.count = 0 THEN
            INSERT INTO foo VALUES (x, 'empty nodes');
        ELSE
            INSERT INTO foo VALUES (x, 'nodes');
    END IF;
    x := x + 100;
END LOOP;
COMMIT;
END;
/

我也在检查null以避免错误。

SQL小提琴

于 2013-05-28T17:43:28.337 回答