2017-12-01 1 views
0

배열에 검색어를로드 :어떻게 함수에서 임시 테이블을 피하기 위해 벡터에 일부 쿼리를로드 할 필요

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 
      ^

를 내가 무슨 일을하고있는 중이 야 ? 테이블을 만들 때 미리

답변

0

Do not loop! 포스트 그레스는이에 대한 좋은 function을 제공

SELECT array_agg(eref), array_agg(edia), array_agg(eimpte) 
FROM (SELECT * from mytable order by edia, eimpte) AS foo 
INTO your variables 

하위 쿼리에 의해 순서를 놓음으로써, 집계 함수를 사용하면 원하는 순서대로 값을 얻을 것이다. 이것은 루핑보다 빠릅니다.

0

에서

덕분에 당신은 edia 열을 가지고 있지 않습니다. 리 마케팅 코드를 살펴보면 다음과 같은 테이블 쿼리를 생성해야한다고 생각합니다.

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

죄송합니다, 오타되었습니다, 존재하지 않습니다 : 테이블을 만들 mytable (eref 시리얼 주키, edia 날짜, eimpte 숫자); --- – glicuado

관련 문제