2016-06-07 63 views
0

我有一個函數接受兩個整數作爲參數my_function(input_a,input_b)。是否有簡單的方法將CTE的結果(返回記錄input_a,input_b)傳遞給函數?PostgreSQL CTE作爲參數記錄功能

我應該看看用for循環編寫自定義函數還是有更好的方法?

+4

'cte as(select 1a,2b)從cte中選擇my_function(a,b);'不起作用?.. –

回答

1

如果函數返回話單記錄:

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); 

橫向將導致PostgreSQL採取每行從CTE並運行「創建my_function」與該行的值,返回該函數的結果對整個SELECT語句。