我有一个函数接受两个整数作为参数 my_function(input_a,input_b)。有没有一种简单的方法可以将CTE的结果(返回 input_a,input_b 的记录)传递给函数?
我是否应该考虑使用for循环编写自定义函数,还是有更好的方法?
答案 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语句。