ホームページ >データベース >mysql チュートリアル >PostgreSQL 関数の単一パラメータに複数の値を渡すにはどうすればよいですか?

PostgreSQL 関数の単一パラメータに複数の値を渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 08:11:41296ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。