PostgreSQL関数

このセクションでは、我々はPostgreSQL関数の動作を理解しようとしている、関数コマンドを作成し、pgadmin4とSQLシェル(PSQL)などのPostgreSQLの異なるツールを使用してPostgreSQL CREATE FUNCTIONコマンドの実時間例を見てください。

そして、位置指定記法、混合記法などのユーザー定義関数の呼び出しの例をご覧ください。

PostgreSQL関数とは

PostgreSQL関数またはストアドプロシージャは、データベースサーバーに格納されている宣言、代入、ループ、フローオブコントロールなどのSQLおよび手続きコマンドの集合で、SQLインターフェースを使用して関わることが可能です。

PostgreSQLの関数は、SQL、PL/pgSQL、C、Pythonなどの言語で作成することができます。

これにより、一般的にデータベース内の関数で様々なコマンドやラウンドトリップを要する操作を行うことができます。

PostgreSQL CREATE Functionコマンドとは何ですか

PostgreSQLで新しいユーザ定義関数を指定するには、CREATE FUNCTIONコマンドを使用することができます。

PostgreSQL CREATE Functionコマンドの構文

PostgreSQL CREATE Functionコマンドの構文は次のとおりです。

パラメータ 説明
function_name
  • 関数名パラメータは関数名を定義するために使用されます。
  • The function name is written after the CREATE FUNCTION keyword.
  • We can use the OR REPLACE keyword if we want to change the current function.
  • And it is an optional parameter.
Function
  • After using the OR REPLACE keyword, we can define the function parameter list that are covered in the parentheses after the Function Name.
  • And a function can contain zero or several parameters.
RETURN
  • We can define the data type after the RETURN keyword, which we are going to return from the function.
  • It can be a base, composite, or domain type or reference of the type of a table column.
Language plpgsql
  • It is used to define the name of the Procedural language in which the function is executed.
  • And not just plpgsql, the PostgreSQL supports various procedural languages.
Function_body
  • The function_body contains the executable parts of the logics.

Example of PostgreSQL Create Function Command

Let us see a different example to understand the working of the PostgreSQL CREATE Function command.

We are taking the Car table from the Javatpoint database, created in the PostgreSQL Tutorial.

Creating a new function

In the below command, we are creating a new function, which counts the Cars whose Car_Price between the Price_from and Price_to parameters:

The get_car_Price function is divided into two main sections, which are Header and Function Body.

ヘッダー セクションでは、次のパラメーターを使用します:

  • まず、関数名を get_car_Price() と指定します。これは create 関数の後に書かれています
  • その後、get_car_Price() 関数に整数データ型の Price_from と Price_to というパラメーターがあります。
  • そして、get_car_Price()関数はreturn int条件で定義された整数を取得します。
  • そして最後に、関数言語をplpgsqlとして使用しました。

関数本体セクションで以下のパラメータを使用しました。

  • 関数セクションでドル引用符付きの文字列constantの図を使用しました。
  • 宣言ブロックでは、Car_countという変数を宣言し、Car
  • ブロックセクションの本文で、Carから選択した車を保存しています。 SELECT INTOコマンドを使用して、Price_fromとPrice_toの間にある車のPriceを選択し、Car_countに出力を与えています
  • ブロックの最後に、RETURNコマンドを使用して

Creating function in PostgreSQL

PostgreSQLにおいて、2通りの方法で関数を作成できます。

  • pgAdminを使ったPostgreSQLの関数作成
  • SQL Shellを使ったPostgreSQLの関数作成

pgAdminを使ったPostgreSQLの関数作成

gAdminで関数を作るには以下のプロセスを踏襲します。

ステップ1

まず、ローカルシステムで最新版のpgAdminを開き、オブジェクトツリーに移動して、関数を作成するJavatpointサンプルデータベースに接続します。

ステップ2

その後、以下のスクリーンショットにあるように、ツールセクションに続いてクエリーツールをクリックすることによってクエリーツールを開きます。

上記のコマンドを実装すると、以下のメッセージ ウィンドウが表示され、関数 get_car_Price1() が同様のデータベースに正常に作成されたことがわかります。

PoatgreSQL Function

そして、次のスクリーンショットに見られるように、Functions リストで関数 get_car_Price() を識別することができます:

PoatgreSQL Function

Note: もし関数名を識別できない場合は、 Functionsノードを右クリックして Refresh… menu item to revive the function list:

PoatgreSQL Function

Creating a function using SQL Shell(psql)

We are going to follow the below process to create a table in psql:

Step1

  • Firstly, we will open the psqlin our local system, and we will connect to the database where we want to create a function.
  • We will create a table in the javatpointdatabase, which we created earlier in the PostgreSQL tutorial.

Step2

  • For connecting a database, we will enter the below command:

Output

After executing the above command, we will get the following output:

PoatgreSQL Function

Note: If we enter a similar command as above to create a function, in psql, it will issue the below error that is: the function get_car_price already exists with the same argument types.

PoatgreSQL Function

Therefore, to resolve this error, we create a new function as get_car_Price1() in the next step.

Step3

We will enter the below command to create a function as get_car_Price1() in the javatpoint database.

Output

We will get the following output on implementing the above command, which displays that the get_car_Price_count1() function has been created successfully.

PoatgreSQL Function

Step4

We can use the below command to list all user-defined functions in the existing database.

Output

After executing the above command, we will get the below output:

PoatgreSQL Function

How to Call a user-defined function

In PostgreSQL, we can call the user-defined function in three ways, which are as follows:

  • 位置記法
  • 名前記法
  • 混合記法

位置記法による関数の呼び出し

引数をパラメータと同様の順序で記述したい場合、位置記法の助けにより関数を呼び出すことができます。

特定の関数を呼び出すために働く位置記法を理解するために、サンプル例を見てみましょう。

以下の例では、get_car_price() の引数は 26000 と 70000 で、これは Price_from と Price_to パラメータと等価です。

出力

上記のコマンドを実行すると、以下の出力が得られます。car_priceが26000から70000の間の4行を取得します。

PoatgreSQL Function

関数にパラメータがない場合、位置記法を用いて、関数を呼び出すことが可能です。

関数にいくつかのパラメータがある場合、特定の関数を呼び出すために名前付き記法を使用することができます。

名前付き表記法による関数の呼び出し

以下の例では、名前付き表記法を使用して get_car_Price() 関数を呼び出したときの動作を示しています。

出力

上記のコマンドを実行すると、以下の出力が得られ、上記の範囲の car_price に基づいて 4 行が表示されます。

PoatgreSQL 関数

前述の記法では、引数の名前と値を区別するために => を使用しました。

PostgreSQLでは、後方互換性のために:=で作成された古い構文が使用できます。

出力

上記のコマンドを実行した後、:=の代わりに ‘=>’ を使用した上記のコマンドの結果と比較して同様の出力を得ることができます。

PoatgreSQL 関数

混合表記による関数の呼び出し

位置指定と名前指定の表記をグループ化したものです。

混合表記による関数の呼び出しの動作を理解するために、サンプルを見てみましょう。

混合表記では、位置パラメーターの前に名前付きパラメーターを使用することはできません。

たとえば、以下のコマンドでは、Price_from パラメータに Price_from=>26000 という名前の記法を使用し、一方 Price_to パラメータには、以下のコマンドでわかるように、70000 という位置の記法を使用しています。

出力

上記のコマンドを実行すると、PostgreSQLは「位置引数が名前付き引数に続かない」というエラーを発生させます。

PoatgreSQL Function

上記のエラーを解決するために、get_car_price() 関数に位置と名前の表記法を使用しています。

出力

上記のコマンドを実行すると、car_price が 26000 から 70000 までの車を返す、以下のような出力が得られます。

PoatgreSQL関数

概要

PostgreSQL関数セクションでは、以下のトピックを学びました。

  • CREATE Functionコマンドを使用して、特定のテーブルに対してユーザー定義関数を作成しました。

r

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です