sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik meerdere rijen retourneren vanuit de PL/pgSQL-functie?

Na het oplossen van de bugs @Pavel wees erop , definieer ook uw retourtype correct, of u moet bij elke oproep een kolomdefinitielijst opgeven.

Deze oproep:

SELECT * FROM get_object_fields()

... gaat ervan uit dat Postgres weet hoe * . uit te breiden . Aangezien u anonieme records retourneert, krijgt u een uitzondering:

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

Een manier (van meerdere) om dit op te lossen is met 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;

Werkt precies hetzelfde voor SQL-functies.

Gerelateerd:



  1. Hoe kan ik een tijdelijke tabel maken in mariadb of mysql?

  2. Zijn er prestatieproblemen bij het opslaan van bestanden in PostgreSQL?

  3. Hoe moet ik mijn sql wijzigen om in dit geval te krijgen wat ik wil?

  4. Beperkingen op PostgreSQL-schemawijzigingen binnen transacties?