Fonction stockée avec table temporaire dans postgresql

Im nouveau à l'écriture de fonctions stockées dans postgresql et en général . Je suis en train d'écrire onw avec un paramètre d'entrée et retourne un jeu de résultats stockés dans une table temporaire.
Je n'ai la suite dans ma fonction .
1) Obtenez une liste de tous les consommateurs et de stocker leur id est stocké dans une table temporaire.
2) effectuer une Itération sur une table particulière et récupérer des valeurs correspondant à chaque valeur de la liste ci-dessus et de les stocker dans une table temporaire.
3)Retour à la table temp.

Voici la fonction que j'ai essayé d'écrire par moi-même ,

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; 

Cependant je ne suis pas sûr de mon approche et si im droit aux points A et B comme je l'ai marqué dans le code ci-dessus.Et prise en charge des erreurs lors de la tentative de création de la table temporaire.

MODIFIER: ont la fonction de travail ,mais j'obtiens l'erreur suivante lorsque j'essaie d'exécuter la fonction.

   ERROR:  array value must start with "{" or dimension information

Voici ma fonction révisée.

 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;
  • si vous préférez, vous pouvez revenir ensemble de lignes au lieu d'une table temporaire
  • pouvez-vous nous donner un exemple?
  • create function GetEmployees() returns setof employee as 'select * from employee;' language 'sql'; de ce wiki: wiki.postgresql.org/wiki/...
InformationsquelleAutor seeker | 2011-11-28