1

ユーザー定義の VARRAY タイプである「node_names」という列を持つデータベース テーブルがあります。私のデータベース テーブルには、'node_names' 列に空の 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;

'node_names' VARRAY が空のすべてのレコードを返す SQL クエリを作成するにはどうすればよいですか?

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 に答える