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

时间:2013-11-02 16:25:42

标签: sql postgresql

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

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>的变量,则会产生相同的结果错误。

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

3 个答案:

答案 0 :(得分:2)

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

CREATE OR REPLACE FUNCTION GetData()
  returns integer
AS $$
  SELECT sum("Value1")::integer FROM "Records";
$$ LANGUAGE sql;
Btw:我强烈建议停止使用带引号的标识符并删除双引号。从长远来看,这将为您省去很多麻烦。

答案 1 :(得分:1)

为什么不组合查询?

...
BEGIN
  SELECT sum("Value1") INTO outValue FROM "Records";
END;
...

答案 2 :(得分: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