PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment renvoyer plusieurs lignes à partir de la fonction PL/pgSQL ?

Après avoir corrigé les bogues @Pavel l'a souligné , définissez également votre type de retour correctement, ou vous devez fournir une liste de définition de colonne avec chaque appel.

Cet appel :

SELECT * FROM get_object_fields()

... suppose que Postgres sait comment développer * . Puisque vous renvoyez des enregistrements anonymes, vous obtenez une exception :

ERROR:  a column definition list is required for functions returning "record"

Une façon (parmi plusieurs) de résoudre ce problème consiste à utiliser RETURNS TABLE (Postgres 8.4+) :

CREATE OR REPLACE FUNCTION get_object_fields()
  RETURNS TABLE (department_id int) AS 
$func$
BEGIN
   RETURN QUERY
   SELECT department_id
   FROM   fact_department_daily 
   WHERE  report_date = '2013-06-07';
END
$func$ LANGUAGE plpgsql;

Fonctionne de la même manière pour les fonctions SQL.

Connexe :