gpt4 book ai didi

postgresql - PL/pgSQL - 从 FUNCTION 返回单个记录

转载 作者:行者123 更新时间:2023-11-29 11:38:19 25 4
gpt4 key购买 nike

我正在使用 PL/pgSQL 创建一个 SP:

CREATE OR REPLACE FUNCTION get_performance_achieve (p_month INT,p_year INT, p_uid INT) 
RETURNS TABLE (
field1 INT,
field2 INT
)
AS $datarows$
DECLARE var_r record;
BEGIN
field1 :=0;
field2 :=0;

FOR var_r IN(select COUNT(id) as counter from "TABLE_A"
)
LOOP
field1 := (var_r.counter) ;
RETURN NEXT;
END LOOP;

FOR var_r IN(select COUNT(id) as counter from "TABLE_B"
)
LOOP
field2 := (var_r.counter) ;
RETURN NEXT;
END LOOP;

END;
$datarows$
LANGUAGE 'plpgsql';

当我执行SP时,它会返回2条记录:

  1. 字段 1 , 0
  2. 字段 1 , 字段 2

如何只返回带有field1, field2的单条记录

最佳答案

如果您想返回单个记录,我不明白为什么要使用 returns table。一个简单的 returns record 就可以做到这一点:返回一条记录:

CREATE OR REPLACE FUNCTION get_performance_achieve (p_month INT,p_year INT, p_uid INT) 
RETURNS record --<< here
AS $datarows$
DECLARE
l_count1 bigint;
l_count2 bigint;
BEGIN
select COUNT(id) into l_count1 from "TABLE_A";
select COUNT(id) into l_count2 from "TABLE_B";
RETURN (l_count1, l_count2);
END;
$datarows$
LANGUAGE plpgsql;

要运行它,使用例如:

select get_performance_achieve(1,2017,42);

然而,以上创建了一个匿名 记录,其中字段没有名称。

如果需要,声明两个 OUT 参数:

CREATE OR REPLACE FUNCTION get_performance_achieve (p_month INT,p_year INT, p_uid INT, field1 out integer, field2 out integer) 
AS $datarows$
BEGIN
select COUNT(id) into field1 from "TABLE_A";
select COUNT(id) into field2 from "TABLE_B";
RETURN (l_count1, l_count2);
END;
$datarows$
LANGUAGE plpgsql;

你可以这样调用它:

select get_performance_achieve(1,2017,42);

它会返回例如(1,2)

如果想把记录的每个字段都看成结果的一列,需要使用:

select (get_performance_achieve(1,2017,42)).*;

如第一个示例所示,对于匿名记录,上述情况是不可能的。

关于postgresql - PL/pgSQL - 从 FUNCTION 返回单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com