sql >> Databáze >  >> RDS >> PostgreSQL

Jak vrátit více řádků z funkce PL/pgSQL?

Po opravě chyb @Pavel upozornil , také definujte typ návratu správně, nebo musíte při každém volání poskytnout seznam definic sloupců.

Tento hovor:

SELECT * FROM get_object_fields()

... předpokládá, že Postgres ví, jak rozšířit * . Protože vracíte anonymní záznamy, dostanete výjimku:

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

Jedním ze způsobů (z několika), jak to vyřešit, je 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;

Funguje stejně pro funkce SQL.

Související:



  1. SQL dotaz nefunguje s objednávkou podle

  2. Použití korelovaného poddotazu

  3. Proč se spojení pomocí výrazu ve smyčce FOR provede pouze jednou?

  4. Existuje bezpečný způsob, jak upravit tabulku pg_constraint, aby se již neprováděla žádná kontrola (dočasně)?