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

Jak zwrócić dynamiczną liczbę kolumn w funkcji?

Jest to możliwe dla funkcji zwracających RECORD.

CREATE FUNCTION calculation(how_many integer) RETURNS SETOF RECORD
LANGUAGE plpgsql
AS $fff$
BEGIN
    IF how_many = 1
        THEN RETURN QUERY SELECT 'foo'::text;
    ELSIF how_many = 2
        THEN RETURN QUERY SELECT 'foo'::text, 'bar'::text;
    END IF;
END;
$fff$
;

A teraz możesz zrobić:

jbet=> SELECT * FROM calculation(1) AS f(first_col text);
 first_col
-----------
 foo
(1 row)

jbet=> SELECT * FROM calculation(2) AS f(first_col text, second_col text);
 first_col | second_col
-----------+------------
 foo       | bar
(1 row)

Bardzo poważna Minusem jest to, że za każdym razem, gdy wywołujesz funkcję, musisz zdefiniować zestaw zwracanych kolumn, więc nie sądzę, że ta odpowiedź będzie przydatna :)

W każdym razie Postgresql musi znać zwrócony typ każdego SELECT przed uruchamia zapytanie, więc w taki czy inny sposób musisz zdefiniować kolumny.

Wartość zwracana JSON może być rozsądną odpowiedzią, jeśli chcesz tylko danych i nie obchodzi cię, czy istnieją oddzielne kolumny, czy nie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica czasu w godzinach pracy

  2. Błędy aplikacji Rails Heroku

  3. Przypadek z encjami doktryn2, symfony2 i postgresql

  4. Jak zmodyfikować pole za pomocą jsonPath w PostgreSQL?

  5. Jak mogę przejrzeć wszystkie dotacje do bazy danych i obiektów dla roli?