Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Jadual Maya daripada Fungsi Postgres?

Bagaimana untuk Mengembalikan Jadual Maya daripada Fungsi Postgres?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 10:28:10725semak imbas

How to Return a Virtual Table from a Postgres Function?

Mengembalikan Jadual Maya daripada Fungsi dalam Postgres

Dalam Postgres, mencipta jadual maya tersuai dengan berbilang baris dan lajur menggunakan fungsi memerlukan khusus sintaks. Artikel ini menunjukkan cara menulis fungsi dengan betul yang mengembalikan set rekod yang menyerupai jadual maya.

Sintaks Betul

Untuk menentukan fungsi yang mengembalikan jadual maya dengan tiga lajur integer, gunakan PL/pgSQL berikut kod:

CREATE OR REPLACE FUNCTION f_foo()
  RETURNS TABLE (a int, b int, c int) AS
$func$
BEGIN
RETURN QUERY VALUES
  (1,2,3)
, (3,4,5)
, (3,4,5)
;
END
$func$  LANGUAGE plpgsql IMMUTABLE ROWS 3;

Penjelasan

  • JADUAL PEMULANGAN: Menunjukkan bahawa fungsi akan mengembalikan jenis baris ad-hoc.
  • KEMBALIKAN NILAI PERTANYAAN: Digunakan untuk mengembalikan berbilang baris menggunakan ungkapan VALUES.
  • ROWS 3: Mengisytiharkan bilangan baris yang dikembalikan, membantu perancang pertanyaan dalam mengoptimumkan pelaksanaan.
  • TIDAK ubah: Menentukan bahawa hasilnya tidak pernah berubah, membenarkan prestasi pengoptimuman.

Pilihan Alternatif

SQL Ringkas: Untuk senario mudah, pernyataan SQL biasa boleh mencukupi:

VALUES (1,2,3), (3,4,5), (3,4,5)

Fungsi SQL: Anda juga boleh membalut pernyataan di atas dalam fungsi SQL:

CREATE OR REPLACE FUNCTION f_foo()
   RETURNS TABLE (a int, b int, c int) AS
$func$
   VALUES (1, 2, 3)
        , (3, 4, 5)
        , (3, 4, 5);
$func$  LANGUAGE sql IMMUTABLE ROWS 3;

Penggunaan

Untuk mendapatkan semula jadual maya:

SELECT * FROM f_foo();

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Jadual Maya daripada Fungsi Postgres?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn