如何将查询加载到数组中
how to load a query into arrays
我需要将一些查询加载到向量中以避免函数中出现临时表:
create table mytable
( eref serial primarykey,
edia date,
eimpte numeric);
---
CREATE OR REPLACE FUNCTION peps(rseller integer)
RETURNS void AS
$BODY$
declare
dep_dia date[] := '{}';
dep_impte numeric[]:= '{}';
dep_ref integer[]:= '{}';
ndepositos integer :=0;
rec record;
begin
for rec in
select eref, edia, eimpte from mytable order by edia, eimpte
loop
ndepositos:=ndepositos+1;
dep_dia[ndepositos] :=edia;
dep_impte[ndepositos]:=eimpte;
dep_ref[ndepositos] :=eref;
end loop;
raise notice ' ndeps %', ndepositos;
end
$BODY$
language plpgsql volatile;
它不起作用:
ERROR: column "edia" does not exist
LINE 1: SELECT edia
^
我做错了什么?
提前致谢
您在创建 table 时没有 edia
列。查看复习代码,我觉得您的创建 table 查询应该如下所示:
create table mytable
( edia serial primarykey,
eref date,
eimpte numeric);
不要循环! Postgres 为此提供了一个很好的function:
SELECT array_agg(eref), array_agg(edia), array_agg(eimpte)
FROM (SELECT * from mytable order by edia, eimpte) AS foo
INTO your variables
通过将 order by 放在子查询中,聚合函数将按照您想要的顺序获取值。这应该比循环更快。
我需要将一些查询加载到向量中以避免函数中出现临时表:
create table mytable
( eref serial primarykey,
edia date,
eimpte numeric);
---
CREATE OR REPLACE FUNCTION peps(rseller integer)
RETURNS void AS
$BODY$
declare
dep_dia date[] := '{}';
dep_impte numeric[]:= '{}';
dep_ref integer[]:= '{}';
ndepositos integer :=0;
rec record;
begin
for rec in
select eref, edia, eimpte from mytable order by edia, eimpte
loop
ndepositos:=ndepositos+1;
dep_dia[ndepositos] :=edia;
dep_impte[ndepositos]:=eimpte;
dep_ref[ndepositos] :=eref;
end loop;
raise notice ' ndeps %', ndepositos;
end
$BODY$
language plpgsql volatile;
它不起作用:
ERROR: column "edia" does not exist
LINE 1: SELECT edia
^
我做错了什么?
提前致谢
您在创建 table 时没有 edia
列。查看复习代码,我觉得您的创建 table 查询应该如下所示:
create table mytable
( edia serial primarykey,
eref date,
eimpte numeric);
不要循环! Postgres 为此提供了一个很好的function:
SELECT array_agg(eref), array_agg(edia), array_agg(eimpte)
FROM (SELECT * from mytable order by edia, eimpte) AS foo
INTO your variables
通过将 order by 放在子查询中,聚合函数将按照您想要的顺序获取值。这应该比循环更快。