2016-06-07 17 views
0

Ich habe eine Funktion, die zwei ganze Zahlen als Parameter akzeptiert my_function (input_a, input_b). Gibt es eine einfache Möglichkeit, die Ergebnisse eines CTE (die Datensätze von input_a, input_b zurückgibt) in die Funktion zu übergeben?PostgreSQL CTE Datensätze als Parameter zur Funktion

Soll ich eine benutzerdefinierte Funktion mit einer for-Schleife schreiben oder gibt es einen besseren Ansatz?

+4

'mit cte als (wählen Sie 1 a, 2 b) wählen Sie my_function (a, b) von cte;' funktioniert nicht? .. –

Antwort

1

Wenn die Funktion ein einzelner Datensatz liefert dann:

WITH cte AS (SELECT 1 a, 2 b) 
SELECT my_function(a, b) FROM cte; 

arbeiten. Handelt es sich bei der Funktion jedoch um eine SRF (Set-Returning-Function), müssen Sie LATERAL verwenden, um der Datenbank mitzuteilen, dass Sie die Ergebnisse der vorherigen Tabellen in der JOIN-Anweisung den später in der Funktion enthaltenen Funktionen zuführen möchten BEITRETEN. Das ist wie so erreicht:

WITH cte AS (SELECT 1 a, 2 b) 
SELECT * FROM cte, LATERAL my_function(a, b); 

Die SEITEN werden PostgreSQL verursachen jede Zeile aus dem CTE zu nehmen und „my_function“ mit den Werten aus dieser Reihe, die Rücksendung die Ergebnisse dieser Funktion auf die Gesamt SELECT-Anweisung ausführen.