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

Kembalikan kueri dari suatu fungsi?

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.col_a, t.col_b  -- must match RETURNS TABLE
   FROM   mytable t
   WHERE  t.name = _tname;    
END
$func$  LANGUAGE plpgsql;

Panggil seperti ini:

SELECT * FROM get_names('name')

Poin utama:

  • Gunakan RETURNS TABLE , jadi Anda tidak perlu memberikan daftar nama kolom untuk setiap panggilan.

  • Gunakan RETURN QUERY , jauh lebih sederhana.

  • Tabel-kualifikasi kolom nama untuk menghindari konflik penamaan dengan nama identik OUT parameter (termasuk kolom yang dideklarasikan dengan RETURNS TABLE ).

  • Gunakan variabel bernama alih-alih ALIAS . Lebih sederhana, melakukan hal yang sama, dan itu adalah cara yang disukai.

  • Fungsi sederhana seperti ini juga dapat ditulis dalam LANGUAGE sql :

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b  --, more columns - must match RETURNS above
FROM   mytable t
WHERE  t.name = $1;
$func$ LANGUAGE sql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ketik string ke integer

  2. Cara Membuat Daftar Database dan Tabel di PostgreSQL Menggunakan psql

  3. PostgreSQL DATEADD() Setara

  4. Bagaimana mencegah PDO menafsirkan tanda tanya sebagai pengganti?

  5. Kueri rekursif yang digunakan untuk penutupan transitif