PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Registros CTE do PostgreSQL como parâmetros para funcionar


Se a função retornar um único registro, então:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;

vai funcionar. No entanto, se a função for um SRF (Set-Returning-Function), você precisará usar LATERAL, para informar ao banco de dados que deseja alimentar os resultados das tabelas anteriores na instrução JOIN para as funções posteriormente no JUNTE. Isso é realizado assim:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);

O LATERAL fará com que o PostgreSQL pegue cada linha do CTE e execute "my_function" com os valores dessa linha, retornando os resultados dessa função para a instrução SELECT geral.