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

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

DDD
DDDasal
2025-01-10 07:55:41723semak imbas

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

Gunakan parameter VARIADIC untuk menghantar berbilang nilai dalam satu parameter

Buat fungsi dengan parameter VARIADIC

Untuk menghantar berbilang nilai kepada satu parameter, anda boleh menggunakan jenis data VARIADIC. Ini membolehkan anda menentukan tatasusunan nilai untuk parameter. Ubah suai fungsi berikut untuk menerima parameter VARIADIC bernama job_ids:

<code class="language-sql">CREATE OR REPLACE FUNCTION test_var(VARIADIC job_ids int[])
RETURNS TABLE (
  job_id int,
  job_reference int,
  job_job_title text,
  job_status text
) AS $$
BEGIN
  RETURN QUERY
  SELECT
    jobs.id,
    jobs.reference,
    jobs.job_title,
    ltrim(right(jobs.status, -2)) AS status  -- 使用right()函数改进字符串处理
  FROM
    jobs
  INNER JOIN
    company c ON c.id = jobs.id  -- 使用INNER JOIN改进查询效率
  WHERE
    jobs."DeleteFlag" = '0' AND
    c.DeleteFlag = '0' AND
    c.active = '1' AND
    (jobs.id = ANY(job_ids) OR job_ids = '{ -1 }') -- 简化条件判断
  ORDER BY
    jobs.job_title;
END;
$$ LANGUAGE plpgsql;</code>

Fungsi panggilan dengan parameter VARIADIC

Anda kini boleh memanggil fungsi test_var dengan menghantar tatasusunan nilai ke parameter job_ids. Contohnya:

<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>

Ini akan mengembalikan data kerja dengan ID 270 dan 378.

Peningkatan fungsi dan cadangan tambahan

Selain menggunakan parameter VARIADIC, anda juga boleh menggunakan fungsi right() dalam kombinasi dengan panjang negatif untuk memangkas aksara pada permulaan rentetan, yang lebih pantas dan lebih ringkas daripada menggunakan substring.

Selain itu, pastikan jenis data lajur DeleteFlag ialah boolean dan bukan teks. Ini memastikan perbandingan dan kecekapan yang betul.

Akhir sekali, fungsi f_test yang disediakan dalam jawapan menunjukkan fungsi SQL ringkas yang mengelakkan penggunaan PL/pgSQL dan menyelesaikan masalah ini. Adalah disyorkan untuk memilih kaedah pelaksanaan fungsi yang sesuai berdasarkan keperluan sebenar.

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