为了将多个值传递给单个参数,可以使用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中文网其他相关文章!