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中文網其他相關文章!