Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Melewati Berbilang Nilai kepada Parameter Tunggal dalam Fungsi PostgreSQL?

Bagaimanakah Saya Boleh Melewati Berbilang Nilai kepada Parameter Tunggal dalam Fungsi PostgreSQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-10 08:11:41226semak imbas

How Can I Pass Multiple Values to a Single Parameter in a PostgreSQL Function?

PostgreSQL fungsi satu parameter lulus berbilang nilai

PostgreSQL menyediakan cara mudah untuk menghantar berbilang nilai ke fungsi menggunakan satu parameter, yang boleh dicapai dengan menggunakan parameter VARIADIC.

Sintaks parameter VARIADIC

Sintaks parameter VARIADIC adalah seperti berikut:

<code class="language-sql">CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)</code>

Di mana, VARIADIC menunjukkan bahawa parameter boleh menerima berbilang nilai. 参数数据类型 Menentukan jenis data nilai yang akan dihantar.

Contoh hantaran nilai berbilang

Fungsi berikut menerima berbilang nilai integer:

<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 *
  FROM jobs
  WHERE job_id = ANY()
  ORDER BY job_job_title;
END;
$$ LANGUAGE plpgsql;</code>

Fungsi ini boleh dipanggil dengan menghantar nilai integer berbilang yang dipisahkan dengan koma:

<code class="language-sql">SELECT * FROM test(270, 378);</code>

Sintaks alternatif untuk menggunakan tatasusunan

Dalam PostgreSQL 9.1 atau lebih baru, anda juga boleh memanggil fungsi parameter VARIADIC secara langsung menggunakan jenis tatasusunan. Kod berikut adalah bersamaan dengan contoh sebelumnya:

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

Cadangan pengoptimuman prestasi lain

  • Gunakan hujah negatif fungsi right() untuk mengalih keluar aksara pada permulaan rentetan, yang lebih pantas daripada menggunakan fungsi substring().
  • Elakkan menggunakan petikan berganda di sekitar nama lajur, seperti "DeleteFlag".
  • Gunakan jenis data boolean yang sesuai untuk mewakili bendera, bukannya jenis data aksara, seperti text.

Fungsi yang dioptimumkan

Menggunakan pengoptimuman di atas, berikut ialah versi diperbaik bagi fungsi asal:

<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 id, reference, job_title, ltrim(right(status, -2)) AS status
FROM company c
JOIN job j USING (id)
WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag
AND id = ANY()
ORDER BY job_title;
$func$ LANGUAGE sql;</code>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Berbilang Nilai kepada Parameter Tunggal dalam Fungsi PostgreSQL?. 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