PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để trả về số cột động trong hàm?

Điều này có thể thực hiện được đối với các hàm trả về 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$
;

Và bây giờ bạn có thể làm:

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)

Rất nghiêm trọng nhược điểm là mỗi lần bạn gọi hàm, bạn phải xác định tập hợp các cột được trả về, vì vậy tôi không nghĩ rằng bạn sẽ thấy câu trả lời này hữu ích:)

Dù sao, Postgresql cần biết loại trả về của mỗi SELECT trước nó chạy truy vấn, vì vậy theo cách này hay cách khác, bạn phải xác định các cột.

Giá trị trả về JSON có thể là một câu trả lời hợp lý nếu bạn chỉ muốn dữ liệu và không quan tâm liệu có các cột riêng biệt hay không.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách nhóm theo và trả về hàng tổng trong Postgres

  2. Tôi có thể làm khô các lệnh sql run / sandbox không?

  3. Postgres thời gian với múi giờ bình đẳng

  4. Làm thế nào để đưa vào một biến giá trị của lựa chọn của Menu Chọn / Thả xuống PHP hoặc HTML

  5. K-Nearest Neighbor Query trong PostGIS