
可変入力パラメーターを持つ関数
PostgreSQL では、可変入力パラメーターを処理するストアド プロシージャと関数を定義できます。これにより、データベース操作を実行する際の柔軟性が向上します。
可変入力パラメーターを処理する 1 つのアプローチは、目的ごとに個別の関数を作成することです。ただし、これにより、特に多くの列を持つテーブルの場合、関数が急増する可能性があります。
別のアプローチは、モード パラメーターを使用して、使用する特定の入力パラメーターを決定する単一の関数を定義することです。このアプローチはより効率的であり、複数の関数の必要性を回避します。
例
ユーザー定義のサイト情報でサイト テーブルを更新する次の関数を考えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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 つのオプションは、デフォルト値を使用することです。これにより、モード パラメータを必要とせずに、オプションのパラメータを使用できるようになります。たとえば、次の関数は、都市が提供されている場合にのみ都市を更新します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 サイトの他の関連記事を参照してください。