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

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

DDD
リリース: 2025-01-10 07:55:41
オリジナル
722 人が閲覧しました

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

VARIADIC パラメーターを使用して、単一パラメーターで複数の値を渡します

VARIADIC パラメーターを使用して関数を作成する

複数の値を 1 つのパラメーターに渡すには、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>
ログイン後にコピー

VARIADIC パラメーターを使用した関数の呼び出し

値の配列を job_ids パラメータに渡すことで、test_var 関数を呼び出すことができるようになりました。例:

<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>
ログイン後にコピー

これにより、ID 270 と 378 のジョブ データが返されます。

機能の改善と追加の提案

VARIADIC パラメーターの使用に加えて、right() 関数を負の長さと組み合わせて使用​​して、文字列の先頭の文字をトリミングすることもできます。これは、substring を使用するよりも高速かつ簡単です。

また、DeleteFlag 列のデータ型がテキストではなくブール型であることを確認してください。これにより、正しい比較と効率が保証されます。

最後に、回答で提供されている f_test 関数は、PL/pgSQL の使用を回避し、これらの問題を解決する簡潔な SQL 関数を示しています。 実際のニーズに基づいて、適切な機能実装方法を選択することをお勧めします。

以上がPostgreSQL で単一の関数パラメータに複数の値を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート