2013-05-28 112 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