PostgreSQL 函数单参数多值传递
PostgreSQL 提供了一种便捷的方式,使用单个参数向函数传递多个值,这可以通过使用 VARIADIC 参数实现。
VARIADIC 参数的语法如下:
<code class="language-sql">CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)</code>
其中,VARIADIC
指示该参数可以接受多个值。参数数据类型
指定将传递的值的数据类型。
以下函数接受多个整数值:
<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>
该函数可以通过传递用逗号分隔的多个整数值来调用:
<code class="language-sql">SELECT * FROM test(270, 378);</code>
在 PostgreSQL 9.1 或更高版本中,您还可以使用数组类型直接调用 VARIADIC 参数函数。以下代码与前面的示例等效:
<code class="language-sql">SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);</code>
right()
函数的负数参数来去除字符串开头的字符,这比使用 substring()
函数更快。"DeleteFlag"
。text
。应用上述优化,以下是原始函数的改进版本:
<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>
以上是如何将多个值传递给 PostgreSQL 函数中的单个参数?的详细内容。更多信息请关注PHP中文网其他相关文章!