1

我创建了函数并想分配查询的可变结果:

CREATE OR REPLACE FUNCTION GetData
(
    OUT outValue integer
)
AS $$
DECLARE
  records "Records";
BEGIN  
  records := (SELECT "Value1" FROM "Records");
  outValue := (SELECT sum("Value1") FROM records)
END;
$$ LANGUAGE plpgsql;

但是,postgresql 说:

"ERROR: subquery in an expression returned more than one row."

如果声明类型为 的变量<"Records"%ROWTYPE>,我们会得到相同的结果错误。

如何用查询结果声明变量?

4

3 回答 3

2

如果您只想返回单个值,为什么不将函数声明为returns integer并使用如下内容:

CREATE OR REPLACE FUNCTION GetData()
  returns integer
AS $$
  SELECT sum("Value1")::integer FROM "Records";
$$ LANGUAGE sql;

顺便说一句:我强烈建议停止使用带引号的标识符并摆脱双引号。从长远来看,这将为您节省很多麻烦。

于 2013-11-02T20:23:22.987 回答
1

为什么不合并查询?

...
BEGIN
  SELECT sum("Value1") INTO outValue FROM "Records";
END;
...
于 2013-11-02T20:18:49.433 回答
1

您可以在函数内创建临时表,并在填充后将其用于查询:

create or replace function GetData()
returns integer
as $$
declare
    outValue int;
begin
    create temporary table records(Value1 int);

    insert into records
    select Value1 from Table1;

    outValue := (select sum(Value1) from records);

    return outValue;
end;
$$ language plpgsql;

sql fiddle demo

于 2013-11-03T16:23:01.807 回答