繁体   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