我有一个数据库表,其中有一个名为'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为空的所有记录?
答案 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
以避免错误。