Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan dan Menggabungkan Medan Rekod daripada Berbilang Jadual PostgreSQL menggunakan PL/pgSQL?

Bagaimana untuk Mendapatkan dan Menggabungkan Medan Rekod daripada Berbilang Jadual PostgreSQL menggunakan PL/pgSQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-04 13:56:40191semak imbas

How to Retrieve and Combine Record Fields from Multiple PostgreSQL Tables using PL/pgSQL?

Mengambil semula Medan Rekod daripada Berbilang Jadual dalam PostgreSQL dengan PL/pgSQL

Mengembalikan berbilang medan daripada jadual berbeza sebagai satu rekod dalam PL/pgSQL memerlukan pembinaan rekod tersuai dengan komposisi medan yang dikehendaki. Begini cara untuk mencapainya:

Mencipta Jenis Data Rekod

Tentukan jenis rekod menggunakan pernyataan CREATE TYPE untuk menentukan medan dan jenis datanya:

CREATE TYPE my_record_type AS (
  field1 text,
  field2 integer,
  field3 boolean
);

Melaksanakan Fungsi

Dalam SP, gunakan pernyataan DECLARE untuk mengisytiharkan pembolehubah jenis rekod dan isikan medannya:

DECLARE
  result my_record_type;
BEGIN
  SELECT field1, field2, field3 INTO result FROM table1;
  -- Retrieve and populate additional fields from other tables
  RETURN result;
END

Mengendalikan Keputusan Berbilang Baris

Untuk mendapatkan semula berbilang baris daripada jadual dan mengagregatkannya ke dalam satu rekod, pertimbangkan untuk menggunakan subkueri. Contohnya, untuk mendapatkan semula dan meratakan baris daripada jadual pengguna:

DECLARE
  result my_record_type;
BEGIN
  SELECT id, name FROM (
    SELECT id, name
    FROM user
    WHERE school_id = InputSchoolId
    LIMIT 2
  ) AS subquery
  INTO result;
RETURN result;
END

Menggunakan Jenis Pemulangan Rekod

Selepas menentukan fungsi, panggilnya untuk mendapatkan semula rekod:

SELECT get_object_fields('name') AS record_output;

Hasilnya ialah rekod yang mengandungi medan daripada yang ditentukan jadual.

Nota

Semasa menggunakan CREATE TYPE untuk hasil polimorfik adalah tidak digalakkan, anda boleh memanfaatkan jenis RECORD untuk fleksibiliti. Contohnya:

CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$
DECLARE 
  result RECORD;
BEGIN
  IF LENGTH(a) < LENGTH(b) THEN
    result = (TRUE, (a || b)::text, 'a shorter than b'::text);
  ELSE
    result = (FALSE, (b || a)::text, NULL::text);
  END IF;
RETURN result;
END;$$ LANGUAGE plpgsql;

Ini membenarkan rekod yang dikembalikan dengan bilangan lajur yang berbeza-beza.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan dan Menggabungkan Medan Rekod daripada Berbilang Jadual PostgreSQL menggunakan PL/pgSQL?. 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