Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Pelbagai Medan sebagai Rekod Tunggal dalam PostgreSQL menggunakan PL/pgSQL?
Mengembalikan Pelbagai Medan sebagai Rekod dalam PostgreSQL dengan PL/pgSQL
Dalam PL/pgSQL, mencipta fungsi yang mengembalikan berbilang medan daripada berbeza jadual sebagai satu rekod boleh dicapai melalui jenis REKOD. Begini caranya:
Jenis REKOD
Isytihar jenis REKOD yang mentakrifkan medan yang ingin anda kembalikan. Contohnya:
CREATE TYPE person AS ( name text, age integer, city text );
Menyoal Jadual Berbeza
Dalam fungsi PL/pgSQL anda, gunakan pertanyaan untuk mendapatkan semula medan daripada jadual yang berbeza. Sebagai contoh, jika anda mempunyai pengguna jadual, alamat dan bandar, anda boleh menulis:
SELECT u.name, u.age, a.city FROM users AS u JOIN addresses AS a ON u.address_id = a.id WHERE u.user_id = @user_id;
Menyimpan Hasil Pertanyaan
Simpan hasil pertanyaan dalam pembolehubah rekod . Jenis REKOD membolehkan anda mengakses medan mengikut nama lajur:
DECLARE result person; SELECT u.name, u.age, a.city INTO result;
Mengembalikan Rekod
Akhir sekali, kembalikan rekod hasil:
RETURN result;
Mengendalikan Keputusan Tidak Teratur
Jika anda boleh mendapatkan semula bilangan baris yang tidak konsisten daripada jadual yang berbeza, gunakan fungsi coalesce() untuk memberikan nilai sandaran:
SELECT coalesce(u.name, 'Unknown'), coalesce(u.age, 0), coalesce(a.city, 'N/A') INTO result;
Contoh dengan Subquery
Jika data yang anda perlukan kembalikan disimpan sebagai baris berasingan dalam satu jadual, gunakan subquery:
CREATE FUNCTION get_two_users_from_school(schoolid int) RETURNS my_type AS $$ DECLARE result my_type; BEGIN -- Select first two users from school SELECT id, name FROM user WHERE school_id = schoolid ORDER BY id LIMIT 2 INTO result; RETURN result; END $$ language plpgsql;
Pendekatan ini membolehkan anda "meratakan" baris menjadi satu struktur rekod.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Pelbagai Medan sebagai Rekod Tunggal dalam PostgreSQL menggunakan PL/pgSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!