ホームページ > データベース > mysql チュートリアル > 単一のパラメータを使用して複数の値を PostgreSQL 関数に渡す方法

単一のパラメータを使用して複数の値を PostgreSQL 関数に渡す方法

Linda Hamilton
リリース: 2025-01-10 06:33:41
オリジナル
1051 人が閲覧しました

How to Pass Multiple Values to a PostgreSQL Function Using a Single Parameter?

PostgreSQL 関数の単一パラメータを介して複数の値を渡す

このガイドでは、VARIADIC 型に焦点を当て、最適化戦略を提供しながら、単一のパラメーターを使用して複数の値を PostgreSQL 関数に効率的に渡す方法を説明します。

VARIADICパラメータの利用

PostgreSQL の 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 j.id, j.reference, j.job_title,
       ltrim(right(j.status, -2)) AS status  -- Optimized string trimming
FROM jobs j
JOIN company c ON j.id = c.id
WHERE c.active
AND NOT c.delete_flag
AND NOT j.delete_flag
AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = )
ORDER BY j.job_title;
END;
$$ LANGUAGE plpgsql;</code>
ログイン後にコピー

この改訂された関数は、入力として整数配列 (int[]) を受け入れます。 VARIADIC キーワードを使用すると、関数が可変数の整数引数を受け入れ、それらを自動的に配列に変換できるようになります。

VARIADIC

による関数呼び出し

関数は配列を使用して直接呼び出すことができます:

<code class="language-sql">SELECT * FROM test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);</code>
ログイン後にコピー

これは機能的に以下と同等です:

<code class="language-sql">SELECT * FROM test(1, 2, 3);</code>
ログイン後にコピー

パフォーマンスの強化とベストプラクティス

効率的な文字列トリミング: PostgreSQL 9.1 以降では、right() を負の長さ (right(j.status, -2)) で使用すると、substring() と比較して先頭文字を削除するための高速かつクリーンな方法が提供されます。

データ型の考慮事項: DeleteFlag がブール値を表す場合、boolean データ型を使用する方が、text よりも効率的で意味的に正しいです。 WHERE 句では、列名の前後に不要な二重引用符を付けないでください。

合理化された関数 (SQL 実装)

可読性の向上と潜在的なパフォーマンスの向上のために、純粋な SQL 実装を検討してください。

<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 j.id, j.reference, j.job_title
        , ltrim(right(j.status, -2)) AS status
   FROM job j
   JOIN company c ON j.id = c.id
   WHERE c.active
   AND NOT c.delete_flag
   AND NOT j.delete_flag
   AND (j.id = ANY() OR '{-1}'::int[] = )
   ORDER BY j.job_title
$func$ LANGUAGE sql;</code>
ログイン後にコピー

この簡略化されたバージョンでは、同じ機能がさらに簡潔になりました。 特定のスキーマに一致するようにテーブル名と列名を必ず調整してください。

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

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