检查VARRAY类型是否为空

时间:2013-05-28 16:40:20

标签: sql oracle oracle11g

我有一个数据库表,其中有一个名为'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为空的所有记录?

1 个答案:

答案 0 :(得分:3)

IS EMPTY applies to nested tables。您可以将COUNT用于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 Fiddle