如何在 Postgres 函数中检索多个结果行?

Posted

技术标签:

【中文标题】如何在 Postgres 函数中检索多个结果行?【英文标题】:How to retrieve multiple result rows in a Postgres functions? 【发布时间】:2019-10-31 04:59:30 【问题描述】:

其实我只想使用下面的代码返回多个结果行。但是在调用函数时我只收到了一行结果集(日期不是问题,因为我在正常的选择查询中检查了相同的日期——它检索了多个结果行)。

如何使用以下函数检索多个结果行?

CREATE OR REPLACE FUNCTION fun_audit_trail(in as_on_date date, out mail_id varchar, out user_id varchar, out user_name varchar, 
        out last_login_time timestamp, out last_logout_time timestamp, out logout_flag varchar, out user_available_flag varchar)
 AS 
$BODY$

BEGIN

    select am.am_usrmailid,am.am_usr_loginid,am.am_usr_name,am.am_last_login_time,am.am_last_logout_time,am.am_logout_flag,am.am_usr_available_flag 
    into mail_id,user_id,user_name,last_login_time,last_logout_time,logout_flag,user_available_flag
    from auth_monitor am where am_last_login_time <= as_on_date;

END $BODY$
  LANGUAGE 'plpgsql' COST 100.0 SECURITY INVOKER;

【问题讨论】:

我认为您需要返回一个表而不是将变量放入out vars。见***.com/questions/32824785/… 使用游标,一个游标可以容纳多条记录 谢谢,带输出参数的返回表工作正常。 【参考方案1】:

你所要做的就是添加

RETURNS SETOF record

在参数列表之后。

【讨论】:

谢谢,我也试过了(setof),但它显示了一些错误。

以上是关于如何在 Postgres 函数中检索多个结果行?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个 where 子句的选择查询在一个结果表中返回多个结果行?

如何在全范围内平均减少 SQL 查询的结果行?

Unix - 在 grep 结果行之间添加字符串

将一列的多个结果行连接成一个,按另一列分组[重复]

SAP HANA SQL - 将单个列的多个结果行合并为单个行

如何正确迭代所有 BigQuery 结果行?