Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meluluskan Berbilang Nilai kepada Fungsi PostgreSQL Menggunakan Parameter Tunggal?

Bagaimana untuk Meluluskan Berbilang Nilai kepada Fungsi PostgreSQL Menggunakan Parameter Tunggal?

Linda Hamilton
Linda Hamiltonasal
2025-01-10 06:33:411054semak imbas

How to Pass Multiple Values to a PostgreSQL Function Using a Single Parameter?

Melalui Berbilang Nilai melalui Parameter Tunggal dalam Fungsi PostgreSQL

Panduan ini menunjukkan cara menghantar berbilang nilai dengan cekap kepada fungsi PostgreSQL menggunakan satu parameter, memfokuskan pada jenis VARIADIC dan menawarkan strategi pengoptimuman.

Memanfaatkan VARIADIC Parameter

Jenis VARIADIC PostgreSQL menawarkan penyelesaian ringkas untuk mengendalikan berbilang nilai input dalam satu parameter. Mari sesuaikan fungsi contoh:

<code class="language-sql">CREATE OR REPLACE FUNCTION test(VARIADIC int[])
RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS
$$
BEGIN
RETURN QUERY
SELECT j.id, j.reference, j.job_title,
       ltrim(right(j.status, -2)) AS status  -- Optimized string trimming
FROM jobs j
JOIN company c ON j.id = c.id
WHERE c.active
AND NOT c.delete_flag
AND NOT j.delete_flag
AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = )
ORDER BY j.job_title;
END;
$$ LANGUAGE plpgsql;</code>

Fungsi yang disemak ini menerima tatasusunan integer (int[]) sebagai input. Kata kunci VARIADIC membolehkan fungsi menerima nombor pembolehubah argumen integer, menukarnya secara automatik kepada tatasusunan.

Invokasi Fungsi dengan VARIADIC

Fungsi ini boleh digunakan terus menggunakan tatasusunan:

<code class="language-sql">SELECT * FROM test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);</code>

Ini bersamaan fungsinya dengan:

<code class="language-sql">SELECT * FROM test(1, 2, 3);</code>

Peningkatan Prestasi dan Amalan Terbaik

Pemangkasan Rentetan yang Cekap: Untuk PostgreSQL 9.1 dan lebih baru, menggunakan right() dengan panjang negatif (right(j.status, -2)) menyediakan kaedah yang lebih pantas dan bersih untuk mengalih keluar aksara utama berbanding substring().

Pertimbangan Jenis Data: Jika DeleteFlag mewakili nilai boolean, menggunakan boolean jenis data adalah lebih cekap dan betul dari segi semantik daripada text. Elakkan petikan berganda yang tidak perlu di sekitar nama lajur dalam fasal WHERE.

Fungsi Diperkemas (Pelaksanaan SQL)

Untuk kebolehbacaan yang dipertingkatkan dan potensi keuntungan prestasi, pertimbangkan pelaksanaan SQL tulen:

<code class="language-sql">CREATE OR REPLACE FUNCTION f_test(VARIADIC int[])
RETURNS TABLE (id int, reference int, job_title text, status text) AS
$func$
   SELECT j.id, j.reference, j.job_title
        , ltrim(right(j.status, -2)) AS status
   FROM job j
   JOIN company c ON j.id = c.id
   WHERE c.active
   AND NOT c.delete_flag
   AND NOT j.delete_flag
   AND (j.id = ANY() OR '{-1}'::int[] = )
   ORDER BY j.job_title
$func$ LANGUAGE sql;</code>

Versi ringkas ini mencapai kefungsian yang sama dengan ketepatan yang dipertingkatkan. Ingat untuk melaraskan nama jadual dan lajur agar sepadan dengan skema khusus anda.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Berbilang Nilai kepada Fungsi PostgreSQL Menggunakan Parameter Tunggal?. 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