PostgreSQL과 일반적으로 저장 함수를 작성하는 데 새로운 점이 있습니다. 입력 매개 변수로 onw를 작성하고 임시 테이블에 저장된 결과 세트를 리턴하려고합니다. 내 기능에서 다음을 수행합니다. 1) 모든 소비자의 목록을 가져 와서 임시 테이블에 저장된 ID를 저장하십시오. 2) 특정 테이블에 대해 반복하고 위 목록에서 각 값에 해당하는 값을 검색하고 임시 테이블에 저장합니다. 3) 임시 테이블을 반환하십시오. 나는 위의 코드에 표시 한대로 다음 postgresql의 임시 테이블을 가진 저장 함수
는create or replace function getPumps(status varchar) returns setof record as $$ (setof record?)
DECLARE
cons_id integer[];
i integer;
temp table tmp_table;--Point B
BEGIN
select consumer_id into cons_id from db_consumer_pump_details;
FOR i in select * from cons_id LOOP
select objectid,pump_id,pump_serial_id,repdate,pumpmake,db_consumer_pump_details.status,db_consumer.consumer_name,db_consumer.wenexa_id,db_consumer.rr_no into tmp_table from db_consumer_pump_details inner join db_consumer on db_consumer.consumer_id=db_consumer_pump_details.consumer_id
where db_consumer_pump_details.consumer_id=i and db_consumer_pump_details.status=$1--Point A
order by db_consumer_pump_details.consumer_id,pump_id,createddate desc limit 2
END LOOP;
return tmp_table
END;
$$
LANGUAGE plpgsql;
그러나 임 내 접근 방식에 대한 확인 및 B와 점 A에서 메신저를 잘인지하지 나 자신에 의해 작성 시도한 기능을,이다 . 그리고 임시 테이블을 만들려고하는 동안 오류가 발생했습니다.
편집 : 작동하는 함수가 있지만 함수를 실행하려고하면 다음 오류가 발생합니다.
ERROR: array value must start with "{" or dimension information
다음은 필자의 수정 된 기능입니다.
create temp table tmp_table(objectid integer,pump_id integer,pump_serial_id varchar(50),repdate timestamp with time zone,pumpmake varchar(50),status varchar(2),consumer_name varchar(50),wenexa_id varchar(50),rr_no varchar(25));
select consumer_id into cons_id from db_consumer_pump_details;
FOR i in select * from cons_id LOOP
insert into tmp_table
select objectid,pump_id,pump_serial_id,repdate,pumpmake,db_consumer_pump_details.status,db_consumer.consumer_name,db_consumer.wenexa_id,db_consumer.rr_no from db_consumer_pump_details inner join db_consumer on db_consumer.consumer_id=db_consumer_pump_details.consumer_id where db_consumer_pump_details.consumer_id=i and db_consumer_pump_details.status=$1
order by db_consumer_pump_details.consumer_id,pump_id,createddate desc limit 2;
END LOOP;
return query (select * from tmp_table);
drop table tmp_table;
END;
$$
LANGUAGE plpgsql;
임시 테이블 대신 임시 테이블 – triclosan
@ triclosan을 반환 할 수 있습니다. 예제를 제공해 주시겠습니까? – KodeSeeker
'create 함수 GetEmployees()는 setof employee를 'select * from employee;'로 반환합니다. language 'sql'; '이 위키에서 : http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions – triclosan