我创建了函数并想要分配查询的变量结果:
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>
的变量,则会产生相同的结果错误。
如何使用查询结果声明变量?
答案 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 强>