PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Enregistrements PostgreSQL CTE en tant que paramètres de fonctionnement

Si la fonction renvoie un seul enregistrement alors :

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

marchera. Cependant, si la fonction est une SRF (Set-Returning-Function), alors vous devez utiliser LATERAL, pour faire savoir à la base de données que vous voulez alimenter les résultats des tables précédentes dans l'instruction JOIN vers les fonctions plus tard dans le REJOINDRE. Ceci est accompli comme suit :

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

Le LATERAL obligera PostgreSQL à prendre chaque ligne du CTE et à exécuter "my_function" avec les valeurs de cette ligne, renvoyant les résultats de cette fonction à l'instruction SELECT globale.