2013-05-28 30 views
0

我有一个数据库表,名为'node_names'的列是用户定义的VARRAY类型。我的数据库表中有记录填充了'node_names'列的空VARRAY。检查VARRAY类型是否为空

以下是一些试图识别空节点名称的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为空的所有记录?

回答

2

IS EMPTYapplies to nested tables。您可以使用COUNTVARRAY,但是只有你的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

+0

谢谢。看起来很有希望。我会放弃它。 – timmy