Postgresql-functions

提供:Dev Guides
移動先:案内検索

PostgreSQL-関数

PostgreSQL 関数(ストアドプロシージャとも呼ばれる)を使用すると、通常はデータベース内の1つの関数で複数のクエリとラウンドトリップを実行する操作を実行できます。 他のアプリケーションは中間層や複製コードの代わりにストアドプロシージャと直接やり取りできるため、関数を使用するとデータベースを再利用できます。

関数は、SQL、PL/pgSQL、C、Pythonなどの選択した言語で作成できます。

構文

関数を作成するための基本的な構文は次のとおりです-

CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$
   DECLARE
      declaration;
      [...]
   BEGIN
      < function_body >
      [...]
      RETURN { variable_name | value }
   END; LANGUAGE plpgsql;

どこで、

  • function-name は、関数の名前を指定します。
  • [OR REPLACE]オプションを使用すると、既存の関数を変更できます。
  • 関数には return ステートメントが含まれている必要があります。
  • RETURN 句は、関数から返すデータ型を指定します。 return_datatype は、ベース、複合、またはドメインタイプにすることも、テーブル列のタイプを参照することもできます。
  • function-body には実行可能部分が含まれます。
  • ASキーワードは、スタンドアロン関数を作成するために使用されます。
  • plpgsql は、関数が実装されている言語の名前です。 ここでは、PostgreSQLに対してこのオプションを使用します。SQL、C、内部、またはユーザー定義の手続き言語の名前を指定できます。 後方互換性のために、名前を単一引用符で囲むことができます。

次の例は、スタンドアロン関数の作成と呼び出しを示しています。 この関数は、COMPANYテーブル内のレコードの総数を返します。 私たちはlink:/postgresql/company.sql [COMPANY]テーブルを使用します。このテーブルには次のレコードがあります-

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

関数totalRecords()は次のとおりです-

CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
    total integer;
BEGIN
   SELECT count(*) into total FROM COMPANY;
   RETURN total;
END;
$total$ LANGUAGE plpgsql;

上記のクエリが実行されると、結果は次のようになります-

testdb# CREATE FUNCTION

ここで、この関数の呼び出しを実行して、COMPANYテーブルのレコードを確認しましょう

testdb=# select totalRecords();

上記のクエリが実行されると、結果は次のようになります-

 totalrecords
--------------
      7
(1 row)