ホームページ >データベース >mysql チュートリアル >PostgreSQL 関数で変数入力パラメータを効率的に処理するにはどうすればよいですか?
可変入力パラメーターを持つ関数
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 つのモードを処理できます:
モード パラメーターを使用すると、目的の更新を行うことができます。複数の関数を必要とせず、単一の関数呼び出しで実行できます。
のデフォルト値パラメータ
可変入力パラメータを処理するためのもう 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 サイトの他の関連記事を参照してください。