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

Kembalikan set catatan (tabel virtual) dari fungsi

(Ini semua diuji dengan postgresql 8.3.7-- apakah Anda memiliki versi sebelumnya? lihat saja penggunaan "ALIAS FOR $1")

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
 RETURNS SETOF RECORD AS $$
DECLARE
 open_id ALIAS FOR $1;
 result RECORD;
BEGIN
 RETURN QUERY SELECT '1', '2', '3';
 RETURN QUERY SELECT '3', '4', '5';
 RETURN QUERY SELECT '3', '4', '5';
END
$$;

Jika Anda memiliki catatan atau variabel baris untuk dikembalikan (bukan hasil kueri), gunakan "RETURN NEXT" daripada "RETURN QUERY".

Untuk menjalankan fungsi tersebut, Anda perlu melakukan sesuatu seperti:

select * from storeopeninghours_tostring(1) f(a text, b text, c text);

Jadi, Anda harus menentukan apa yang Anda harapkan dari skema baris keluaran fungsi dalam kueri. Untuk menghindarinya, Anda dapat menentukan variabel keluaran dalam definisi fungsi:

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
 RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
 RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;

(tidak yakin mengapa tambahan ::text cast diperlukan... '1' adalah varchar secara default mungkin?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres - di mana di (daftar) - kolom tidak ada

  2. Bagaimana cara memasukkan beberapa nilai ke dalam tabel postgres sekaligus?

  3. Pertahankan zona waktu dalam jenis stempel waktu PostgreSQL

  4. Membandingkan Penyimpanan Data untuk PostgreSQL - MVCC vs InnoDB

  5. Pemicu postgres setelah memasukkan mengakses BARU