PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana mengembalikan jumlah kolom dinamis dalam fungsi?

Ini dimungkinkan untuk fungsi pengembalian 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$
;

Dan sekarang Anda dapat melakukan:

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)

sangat serius downside adalah bahwa setiap kali Anda memanggil fungsi, Anda harus mendefinisikan set kolom yang dikembalikan, jadi saya rasa Anda tidak akan menemukan jawaban ini berguna:)

Bagaimanapun, Postgresql perlu mengetahui tipe yang dikembalikan dari setiap SELECT sebelum itu menjalankan kueri, jadi dengan satu atau lain cara Anda harus mendefinisikan kolom.

Nilai pengembalian JSON bisa menjadi jawaban yang masuk akal jika Anda hanya menginginkan data dan tidak peduli apakah ada kolom terpisah atau tidak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. agregat dari kumpulan hasil kosong

  2. Tidak dapat menemukan header 'libpq-fe.h saat mencoba menginstal pg gem

  3. SET IDENTITY_INSERT postgresql

  4. Memvalidasi kueri SQL dengan PHP

  5. Spring Boot data-jpa dan nativeQuery Postgres cast