ホームページ >データベース >mysql チュートリアル >PostgreSQL 関数で変数入力パラメータを効率的に処理するにはどうすればよいですか?

PostgreSQL 関数で変数入力パラメータを効率的に処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 09:04:18414ブラウズ

How Can I Efficiently Handle Variable Input Parameters in PostgreSQL Functions?

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

PostgreSQL では、可変入力パラメーターを処理するストアド プロシージャと関数を定義できます。これにより、データベース操作を実行する際の柔軟性が向上します。

可変入力パラメーターを処理する 1 つのアプローチは、目的ごとに個別の関数を作成することです。ただし、これにより、特に多くの列を持つテーブルの場合、関数が急増する可能性があります。

別のアプローチは、モード パラメーターを使用して、使用する特定の入力パラメーターを決定する単一の関数を定義することです。このアプローチはより効率的であり、複数の関数の必要性を回避します。

ユーザー定義のサイト情報でサイト テーブルを更新する次の関数を考えてみましょう。

CREATE OR REPLACE FUNCTION update_site(
    mode integer,
    name character varying,
    city character varying,
    telephone integer,
)
RETURNS integer AS
$$
BEGIN
IF mode = 0 THEN
BEGIN
    UPDATE "Sites" SET 
    ("City","Telephone") = (city,telephone)
    WHERE "SiteName" = name;
    RETURN 1;
    EXCEPTION WHEN others THEN
    RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
    RETURN 0;
END;
ELSIF mode = 1 THEN
BEGIN
    UPDATE "Sites" SET "City" = city
    WHERE "SiteName" = name;
    RETURN 1;
    EXCEPTION WHEN others THEN
    RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
    RETURN 0;
END;
    ELSIF mode = 2 THEN
BEGIN
    UPDATE "Sites" SET "Telephone" = telephone
    WHERE "SiteName" = name;
    RETURN 1;
    EXCEPTION WHEN others THEN
    RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
    RETURN 0;
END;
    ELSE
            RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
    RETURN 0;
    END IF;
END;
$$ LANGUAGE plpgsql;

この関数は 3 つのモードを処理できます:

  • モード0: 都市と電話の両方を更新します
  • モード 1: 都市のみを更新します
  • モード 2: 電話のみを更新します

モード パラメーターを使用すると、目的の更新を行うことができます。複数の関数を必要とせず、単一の関数呼び出しで実行できます。

のデフォルト値パラメータ

可変入力パラメータを処理するためのもう 1 つのオプションは、デフォルト値を使用することです。これにより、モード パラメータを必要とせずに、オプションのパラメータを使用できるようになります。たとえば、次の関数は、都市が提供されている場合にのみ都市を更新します。

CREATE OR REPLACE FUNCTION update_site(
    name character varying,
    city character varying DEFAULT NULL,
    telephone integer DEFAULT NULL,
)
RETURNS integer AS
$$
BEGIN
    UPDATE "Sites" SET
    ("City", "Telephone") = (city, telephone)
    WHERE "SiteName" = name;
    RETURN 1;
    EXCEPTION WHEN others THEN
    RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE;
    RETURN 0;
END;
$$ LANGUAGE plpgsql;

変数入力パラメーターを処理するための最適なアプローチは、アプリケーションの特定の要件によって異なります。入力パラメータが大きく異なる場合は、モード パラメータまたは複数の関数の使用が必要になる場合があります。ただし、入力パラメーターに一貫性がある場合は、デフォルト値を使用する方が、よりシンプルで効率的なソリューションを提供できます。

以上がPostgreSQL 関数で変数入力パラメータを効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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