PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come restituire più righe dalla funzione PL/pgSQL?

Dopo aver corretto i bug @Pavel ha sottolineato , definisci anche il tuo tipo di reso correttamente, oppure devi fornire un elenco di definizioni di colonna con ogni chiamata.

Questa chiamata:

SELECT * FROM get_object_fields()

... presuppone che Postgres sappia come espandere * . Poiché stai restituendo record anonimi, ottieni un'eccezione:

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

Un modo (di molti) per risolvere questo problema è con 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;

Funziona allo stesso modo per le funzioni SQL.

Correlati: