PostgreSQL CTE记录为函数的参数

时间:2016-06-07 05:13:29

标签: postgresql

我有一个函数接受两个整数作为参数 my_function(input_a,input_b)。有没有一种简单的方法可以将CTE的结果(返回 input_a,input_b 的记录)传递给函数?

我是否应该考虑使用for循环编写自定义函数,还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

如果函数返回单个记录,则:

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

会奏效。但是,如果该函数是SRF(Set-Returning-Function),那么您需要使用LATERAL,让数据库知道您希望将JOIN语句中先前表的结果提供给稍后的函数。加入。这样就完成了:

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

LATERAL将导致PostgreSQL从CTE中获取每一行并运行" my_function"使用该行的值,将该函数的结果返回给整个SELECT语句。