2017-11-16 1 views
2

ich eine Funktion in Postgres entlang der Linien von dieser erstellen möchten:Mit WHERE ... IN in einer Postgres Funktion

CREATE OR REPLACE FUNCTION public.getAvailableForms (
    get_form_names TEXT[] 
) RETURNS TABLE (
    id   INTEGER, 
    name  TEXT, 
    location TEXT, 
    created  TIMESTAMP 
) AS $$ 
BEGIN 
    RETURN QUERY 
     SELECT * 
      FROM form 
     WHERE form.name IN get_form_names; 
END; 
$$ LANGUAGE plpgsql 
    SECURITY DEFINER; 

aber es sagt mir, dass WHERE form.name IN get_form_names syntaktisch falsch ist.

Ich kann keine Dokumentation zur Verwendung von Array-Variablen in einem Postgres-Funktionsaufruf finden.

Wie auch immer, ist es möglich, einen Array-Wert zu verwenden, der als Funktionsargument in einem WHERE ... IN übergeben wird?

+1

Ich vergaß etwas zu erwähnen ... wenn Sie wirklich 'Select *', dann müssen Sie nicht die Tabelle als die Ausgabe deklarieren. Statt dessen könnten Sie 'RETURNS SETOF form AS' anstelle von' RETURNS TABLE (...) AS' ausführen. Ich weiß, dass dies ein primitives Beispiel sein könnte, um Ihr Problem zu demonstrieren, aber wenn Sie wirklich jedes Feld aus der Tabelle "form" zurückgeben, könnte dies hilfreich sein. – Hambone

Antwort

4

Verwenden any:

where form.name = any (get_form_names) 

in würde für eine diskrete Liste der Elemente, aber any wird für ein Array verwendet.

+0

"in wäre für eine diskrete Liste von Elementen, aber jeder wird für ein Array verwendet" - danke, ich habe heute etwas Neues gelernt :) wird Ihre Antwort akzeptieren, sobald ich darf –

+1

bin ich froh . Lesen Sie die Postgresql-Arrays. Sie sind ein Game Changer. – Hambone

Verwandte Themen