ホームページ > データベース > mysql チュートリアル > デフォルト値により、可変入力パラメーターの PostgreSQL 関数設計はどのように改善できるでしょうか?

デフォルト値により、可変入力パラメーターの PostgreSQL 関数設計はどのように改善できるでしょうか?

Patricia Arquette
リリース: 2024-12-25 03:37:23
オリジナル
511 人が閲覧しました

How Can Default Values Improve PostgreSQL Function Design for Variable Input Parameters?

可変入力パラメータを持つ関数

PostgreSQL でストアド プロシージャ (関数) を作成する場合、入力に基づいてテーブルの更新を処理する必要があります。パラメータ。可変入力パラメータに対応するための 1 つのアプローチは、モード パラメータを導入することです。このモード パラメータは、更新クエリで使用する特定のパラメータを制御します。

ただし、別の方法として、関数パラメータのデフォルト値を使用することもできます。

デフォルト値

関数パラメータのデフォルト値を定義することで、関数を簡素化し、コードの可読性を向上させることができます。次の例を考えてみましょう:

CREATE OR REPLACE FUNCTION update_site(_name text, _city text DEFAULT NULL, _telephone int DEFAULT NULL)
RETURNS int
LANGUAGE plpgsql AS
$func$
BEGIN
   IF _city IS NULL AND _telephone IS NULL THEN
      RAISE WARNING 'At least one not-null input value required!';
      RETURN;  -- nothing to update
   END IF;

   UPDATE "Sites"
   SET    "City"      = COALESCE(_city, "City")
        , "Telephone" = COALESCE(_telephone, "Telephone")
   WHERE  "SiteName"  = _name;
END
$func$;
ログイン後にコピー

デフォルト値の利点:

  • 関数コードの簡素化: 複雑な CASE ステートメントは不要またはモードに基づく条件付きロジック
  • 名前の衝突を回避します: 入力パラメータにアンダースコア接頭辞を使用すると、列名との衝突を防ぎます。
  • 可読性の向上: より明確で直感的な関数ロジック。

使用法:

この更新された関数は、さまざまな呼び出し表記法で使用できます:

  • 位置表記法:
SELECT update_site('foo', 'New York');  -- no telephone
ログイン後にコピー
  • 名前付き表記法:
SELECT update_site(name => 'foo', _telephone => 123);  -- no city
ログイン後にコピー
  • 混合表記:
SELECT update_site('foo', _telephone => 123);  -- still no city
ログイン後にコピー

効率

どちらのアプローチも、モード パラメーターまたはデフォルト値を使用して、単純な更新操作では効率的です。ただし、より複雑なシナリオの場合は、デフォルト値を使用すると、より明確で保守しやすいソリューションが提供される場合があります。

アプローチの選択

特定の要件に応じた最適な選択です。列が NOT NULL として定義されている場合、デフォルト値を使用すると、より簡単で高速なアプローチが提供されます。さまざまな出力を伴う SELECT クエリを含むより複雑なシナリオの場合は、VARIADIC またはポリモーフィック入力タイプと動的 SQL の使用を検討してください。

以上がデフォルト値により、可変入力パラメーターの PostgreSQL 関数設計はどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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