如何将查询加载到数组中

时间:2017-12-01 23:16:44

标签: arrays postgresql plpgsql

我需要在向量中加载一些查询以避免函数中的临时表:

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
               ^

我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

创建表时,您没有edia列。看看重新编写代码,我觉得你的create table查询应该如下:

create table mytable
 ( edia serial primarykey,
   eref  date,
   eimpte numeric);

答案 1 :(得分:0)

不要循环! 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

通过将订单放在子查询中,聚合函数将按您想要的顺序获取值。这应该比循环更快。