sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur returnerar man flera rader från PL/pgSQL-funktionen?

Efter att ha åtgärdat felen påpekade @Pavel , definiera även din returtyp korrekt, eller så måste du tillhandahålla en kolumndefinitionslista med varje anrop.

Detta samtal:

SELECT * FROM get_object_fields()

... antar att Postgres vet hur man expanderar * . Eftersom du returnerar anonyma poster får du ett undantag:

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

Ett sätt (av flera) att fixa detta är med 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;

Fungerar på samma sätt för SQL-funktioner.

Relaterat:



  1. Gå inte med i en tabell om kolumnvärdet inte finns

  2. Fel med Maven GAE Plugin + Google Cloud SQL

  3. hur man infogar tabbavgränsad fil i mysql med relation

  4. Laravel 5 + PostgreSQL:Databas [postgres] inte konfigurerad. Fel