2016-10-30 5 views
0

Meine erste Funktion verbraucht einen Array von UUID und gibt einen Satz von Zeilen aus der Tabelle:Warum gibt Postgres kein Ergebnis zurück?

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; 

Vorerst ich ein anderes konsumieren Liste des UUID als varchar und gibt die gleichen Daten wie die ersten schreiben will Funktion.

Mein schlechter Versuch:

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

Bitte geben Sie Beispieldaten und zeigen, was Sie erwarten und was Sie bekommen. –

+0

Fun1-Prozedur funktioniert gut und liefert ein korrektes Ergebnis. fun2 erzeugt ein leeres Ergebnis ohne Felder. –

Antwort

0

ich von mir selbst beantworten würde:

Funktion fun1 varchar mit der Umstellung auf Anordnung von UUID verwenden kann, wenn ich es verwenden. so kann ich schreiben:

select * from fun1('{some UUID array as varchar}'::UUID[]); 
Verwandte Themen