2016-10-30 6 views
0

私の最初の関数は、UUIDの配列を消費し、テーブルから行のセットを返します。なぜPostgreSQLは結果を返しませんか?

CREATE OR REPLACE FUNCTION fun1 (
    "UUID_" uuid [] 
) 
RETURNS SETOF service AS 
$body$ 
with recursive tree as (
SELECT * FROM service 
    WHERE id = ANY($1) 
    UNION ALL 
    SELECT service.* FROM service 
     JOIN tree ON service.id = tree.parent_id) 
select distinct * from tree; 
$body$ 
LANGUAGE 'sql' 
VOLATILE 
CALLED ON NULL INPUT 
SECURITY INVOKER 
COST 100 ROWS 1000; 

今の私はvarchar型としてUUIDのリストを消費し、最初と同じデータを返すために別のものを書きたいです関数。

私の悪い試し:

CREATE OR REPLACE FUNCTION fun2 (
    "UUID_" varchar 
) 
RETURNS TABLE (
    "ID" uuid, 
    "NAME" varchar, 
    "PARENT_ID" uuid 
) AS 
$body$ 
BEGIN 
RETURN QUERY 
with recursive tree as (
SELECT * FROM service 
    WHERE id = ANY(string_to_array($1, ',')::UUID[]) 
    UNION ALL 
    SELECT service.* FROM service 
     JOIN tree ON service.id = tree.parent_id) 

    select distinct(ID), name, parent_id from tree; 
END; 
$body$ 
LANGUAGE 'plpgsql' 
VOLATILE 
CALLED ON NULL INPUT 
SECURITY INVOKER 
COST 100 ROWS 1000; 
+0

サンプルデータを提供し、あなたが何を得るかを示してください。 –

+0

fun1プロシージャは正常に動作し、正しい結果を生成します。 fun2フィールドなしで空白の結果が生成されます。 –

答えて

0

私は自分でお答えします:私はそれを使用する場合

機能FUN1はUUIDの配列に変換するとvarchar型を使用することができます。 私は次のように書くことができます:

select * from fun1('{some UUID array as varchar}'::UUID[]); 
関連する問題