PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да върна динамичния брой колони във функцията?

Това е възможно за връщащи функции 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$
;

И сега можете да направите:

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)

Намного сериозно недостатъкът е, че всеки път, когато извикате функцията, трябва да дефинирате набор от върнати колони, така че не мисля, че ще намерите този отговор за полезен :)

Както и да е, Postgresql трябва да знае върнатия тип на всеки SELECT before той изпълнява заявката, така че по един или друг начин трябва да дефинирате колоните.

Връщаната стойност на JSON може да бъде разумен отговор, ако просто искате данните и не ви интересува дали има отделни колони или не.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да задам стойност за изчакване на връзката за pgAdmin?

  2. PostgreSQL срещу версии на ядрото на Linux

  3. Идентификаторът на колона Doctrine не съществува в PostgreSQL

  4. Функцията Postgresql не връща таблица при избор

  5. Как да добавите променлив брой часове към дата в PostgreSQL?