PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como retornar várias linhas da função PL/pgSQL?


Depois de corrigir os bugs @Pavel apontou , também defina seu tipo de retorno corretamente, ou você deve fornecer uma lista de definição de coluna com cada chamada.

Esta chamada:
SELECT * FROM get_object_fields()

... assume que o Postgres sabe como expandir * . Como você está retornando registros anônimos, você recebe uma exceção:
ERROR:  a column definition list is required for functions returning "record"

Uma maneira (de várias) de corrigir isso é com 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;

Funciona para funções SQL da mesma forma.

Relacionado: