2016-12-05 2 views
3

Erstellt eine Ansicht, meine Eingabe wird in einem Komma getrennt, Eingabe enthält nur die Spaltennamen der Ansicht.Daten abrufen von einer Ansicht in PostgreSQL mit kommagetrennten Eingabe

Meine Eingabe ist '"Name","Description"' wie folgt.

habe ich versucht, wie diese

Select unnest(string_to_array('"Name","Description"',',')) 
From my_test_view 

Leider habe ich wie dieses Ergebnis

"Name" 
"Description" 
"Name" 
"Description" 

dieses nur meine Spaltennamen auswählen. Ich brauche JSON-Ausgabe mit Spaltenwerten. Meine Eingabe ist dynamisch

Antwort

1

Effektiv versuchen Sie, Kennungen in einer Ansicht dynamisch zu verwenden, um Daten auszuwählen. Sie müssen dazu eine PL/pgSQL-Funktion schreiben.

Wenn Sie die Eingangsdaten vertrauen (dh Sie sicher sind, dass die Eingabe nur durch Kommata getrennte Spaltennamen enthält), dann ist die Lösung sehr einfach:

CREATE FUNCTION my_test_view_dynamic(columns text) RETURNS SET OF my_test_view AS $$ 
BEGIN 
    RETURN QUERY EXECUTE format('SELECT %s FROM my_test_view', columns); 
END; 
$$ LANGUAGE plpgsql STABLE STRICT; 

Wenn Sie nicht so sicher sind, the sanity of the input data, Scheck zuerst:

CREATE FUNCTION my_test_view_dynamic(columns text) RETURNS SET OF my_test_view AS $$ 
DECLARE 
    c text; 
    safe_names text[] := '{}'::text[]; 
BEGIN 
    FOREACH c IN ARRAY regexp_split_to_array(columns, ',') LOOP 
     safe_names := safe_names || quote_identifier(c); 
    END LOOP; 
    RETURN QUERY EXECUTE format('SELECT %s FROM my_test_view', concat_ws(safe_names, ',')); 
END; 
$$ LANGUAGE plpgsql STABLE STRICT; 

Dann wie nennen:

SELECT * FROM my_text_view_dynamic('"Name","Description"'); 
+0

Danke für mich gearbeitet !! – Casisac

+0

Neu bei SO, Danke für die Informationen. – Casisac

Verwandte Themen