為了將多個值傳遞給單一參數,可以使用VARIADIC資料型別。這允許您為參數指定一個值數組。修改下列函數以接受名為job_ids的VARIADIC參數:
<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>
現在,您可以透過將值數組傳遞給job_ids參數來呼叫test_var函數。例如:
<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>
這將傳回ID為270和378的作業資料。
除了使用VARIADIC參數外,還可以使用right()
函數結合負長度來修剪字串開頭的字符,這比使用substring
更快更簡單。
此外,應確保DeleteFlag
列的資料類型為布林型而非文字型。這可以確保正確的比較和效率。
最後,答案中提供的f_test函數示範了一個簡潔的SQL函數,該函數避免使用PL/pgSQL並解決了這些問題。 建議根據實際需求選擇合適的函數實作方式。
以上是如何在 PostgreSQL 中將多個值傳遞給單一函數參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!