Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengembalikan Pelbagai Medan sebagai Rekod Tunggal dalam PostgreSQL menggunakan PL/pgSQL?

Bagaimana untuk Mengembalikan Pelbagai Medan sebagai Rekod Tunggal dalam PostgreSQL menggunakan PL/pgSQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-04 05:54:37688semak imbas

How to Return Multiple Fields as a Single Record in PostgreSQL using 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!

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