首頁 > 資料庫 > mysql教程 > 如何將多個值傳遞給 PostgreSQL 函數中的單一參數?

如何將多個值傳遞給 PostgreSQL 函數中的單一參數?

Mary-Kate Olsen
發布: 2025-01-10 08:11:41
原創
226 人瀏覽過

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

PostgreSQL 函數單一參數多值傳遞

PostgreSQL 提供了一種便捷的方式,使用單一參數向函數傳遞多個值,這可以透過使用 VARIADIC 參數來實現。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板