[英]Passing more than one row (query result) into a function
我有一個函數的SELECT(具有普通的,而不是SETOF參數)。 但是,我想在查詢中多次調用該函數(然后匯總結果),並向其提供CTE。
一些(示例)代碼:
CREATE TYPE MY_TYPE AS ( a integer, b integer );
CREATE OR REPLACE FUNCTION foo( foobar INTEGER )
RETURNS MY_TYPE AS $$
BEGIN
-- do something, return MY_TYPE
END;
$$ LANGUAGE plpgsql;
WITH x AS (
SELECT a FROM bar WHERE b = 1
)
SELECT min(a) FROM foo( (SELECT a FROM x) ) f
這不起作用,我收到以下錯誤消息:
ERROR: more than one row returned by a subquery used as an expression
現在,我想知道如何重寫查詢。 我可以遍歷CTE結果,然后一次用一個輸入值調用該函數,將結果存儲在列中,最后找到最小值-這感覺很笨拙,應該很慢。 另一種方法是將我的函數包裝在另一個帶有數組參數的set-returning中。 但這只是把問題推開了:我不知道如何簡單地包裝它。
可以將函數重寫為SETOF形式。 不過,這是一種解決方法,學習如何使用查詢返回的多行(如果可能的話)來調用普通函數會更好。
嘗試這個:
SELECT min(f.a)
FROM bar
CROSS JOIN foo(bar.a) f
WHERE bar.b = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.