PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-CTE-Datensätze als Parameter für die Funktion

Wenn die Funktion einen einzelnen Datensatz zurückgibt, dann:

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

wird funktionieren. Wenn die Funktion jedoch eine SRF (Set-Returning-Function) ist, müssen Sie LATERAL verwenden, um die Datenbank wissen zu lassen, dass Sie die Ergebnisse der vorherigen Tabellen in der JOIN-Anweisung später in die Funktionen einspeisen möchten BEITRETEN. Dies wird folgendermaßen erreicht:

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

Das LATERAL bewirkt, dass PostgreSQL jede Zeile aus dem CTE nimmt und "my_function" mit den Werten aus dieser Zeile ausführt und die Ergebnisse dieser Funktion an die gesamte SELECT-Anweisung zurückgibt.