簡體   English   中英

將多個行(查詢結果)傳遞給函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM