Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Berbilang Medan sebagai Rekod Tunggal dalam PostgreSQL Menggunakan PL/pgSQL?

Bagaimana untuk Mendapatkan Berbilang Medan sebagai Rekod Tunggal dalam PostgreSQL Menggunakan PL/pgSQL?

Barbara Streisand
Lepaskan: 2025-01-05 05:49:43
asal
616 orang telah melayarinya

How to Retrieve Multiple Fields as a Single Record in PostgreSQL Using PL/pgSQL?

Mendapatkan Berbilang Medan sebagai Rekod dalam PostgreSQL Menggunakan PL/pgSQL

Apabila bekerja dengan interaksi pangkalan data, ia sering menjadi perlu untuk mengambil data daripada berbilang jadual dan membentangkannya sebagai rekod bersatu. PostgreSQL membenarkan fungsi ini menggunakan jenis RECORD dalam PL/pgSQL, membolehkan pembangun mendapatkan semula medan daripada jadual berbeza sebagai medan dalam satu rekod.

Mengembalikan Medan daripada Jadual Berbeza sebagai Rekod Tunggal

Kepada mendapatkan semula medan daripada berbilang jadual sebagai medan dalam satu rekod, PL/pgSQL menggunakan RECORD taip. Berikut ialah versi contoh anda yang diubah suai:

CREATE OR REPLACE FUNCTION get_object_fields(name text)
  RETURNS RECORD AS $$
BEGIN
  -- Fetch fields f1, f2, and f3 from table t1
  -- Fetch fields f4, f5 from table t2
  -- Fetch fields f6, f7, and f8 from table t3

  -- Create a record to store the fetched fields
  RETURN RECORD(
    f1 TEXT,
    f2 TEXT,
    f3 TEXT,
    f4 TEXT,
    f5 TEXT,
    f6 TEXT,
    f7 TEXT,
    f8 TEXT
  );
END
$$ language plpgsql;
Salin selepas log masuk

Mengendalikan Baris dengan Berbilang Medan daripada Satu Jadual

Apabila berhadapan dengan situasi di mana medan tertentu mungkin disimpan merentas berbilang baris dalam satu jadual, jenis REKOD masih boleh digunakan dengan berkesan. Dalam contoh anda dengan jadual 'pengguna', anda boleh mengubah suai kod seperti berikut:

CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int)
  RETURNS my_type AS $$
DECLARE
  result my_type;
  temp_result RECORD;
  user1 RECORD;
  user2 RECORD;
BEGIN
  SELECT id, name INTO temp_result FROM user WHERE school_id = schoolid LIMIT 2;

  -- Split the fetched rows into individual user records
  user1.user1_id := temp_result.id;
  user1.user1_name := temp_result.name;

  -- Handle the second row if available
  IF FOUND THEN
    user2.user2_id := temp_result.id;
    user2.user2_name := temp_result.name;
  END IF;

  -- Return the combined user record
  result.user1_id := user1.user1_id;
  result.user1_name := user1.user1_name;
  result.user2_id := user2.user2_id;
  result.user2_name := user2.user2_name;

  RETURN result;
END
$$ language plpgsql;
Salin selepas log masuk

Pengendalian Keputusan Polimorfik

Semasa menggunakan CREATE TYPE mungkin kelihatan munasabah untuk mengembalikan hasil polimorfik, PL/ pgSQL menyediakan pendekatan yang lebih fleksibel dan mantap. Dengan menyalahgunakan jenis RECORD, anda boleh mengembalikan bilangan lajur yang berbeza-beza berdasarkan input, menjadikannya sesuai untuk mengendalikan mesej ralat pilihan atau maklumat tambahan.

Berikut ialah contoh:

CREATE FUNCTION test_ret(a TEXT, b TEXT) RETURNS RECORD AS $$
DECLARE
  ret RECORD;
BEGIN
  IF LENGTH(a) < LENGTH(b) THEN
    ret := (TRUE, a || b, 'a shorter than b');
  ELSE
    ret := (FALSE, b || a);
  END IF;
  RETURN ret;
END;
$$ LANGUAGE plpgsql;
Salin selepas log masuk

Fungsi ini secara dinamik mengembalikan sama ada dua atau tiga lajur bergantung pada input dan boleh digunakan untuk pelbagai senario, seperti mengembalikan status kejayaan dan ralat pilihan mesej.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Berbilang Medan sebagai Rekod Tunggal dalam PostgreSQL Menggunakan PL/pgSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan