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:
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 );
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
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
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.
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!