PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zwrócić wiele wierszy z funkcji PL/pgSQL?

Po naprawieniu błędów @Pavel wskazał , określ także typ zwrotu poprawnie lub musisz dostarczyć listę definicji kolumn przy każdym wywołaniu.

Ta rozmowa:

SELECT * FROM get_object_fields()

... zakłada, że ​​Postgres wie, jak rozwinąć * . Ponieważ zwracasz anonimowe rekordy, otrzymujesz wyjątek:

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

Jednym ze sposobów (z kilku), aby to naprawić, jest użycie 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;

Działa tak samo dla funkcji SQL.

Powiązane:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja warunkowego wyprzedzenia/opóźnienia PostgreSQL?

  2. Optymalizacja zapytania dotyczącego podobieństwa postgres (pg_trgm + indeks gin)

  3. Mam problemy z połączeniem HAVING z WHERE na bardzo prostym QUERY

  4. BŁĄD PostgreSQL:podzapytanie w FROM nie może odnosić się do innych relacji tego samego poziomu zapytania

  5. Postgres niewrażliwy na akcentowanie wyszukiwania LIKE w Rails 3.1 na Heroku