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

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

Mary-Kate Olsen
リリース: 2024-12-19 09:04:18
オリジナル
510 人が閲覧しました

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

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

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 サイトの他の関連記事を参照してください。

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