Plsql-functions

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

PL/SQL-関数

この章では、PL/SQLの関数について説明します。 関数は、値を返すことを除いてプロシージャと同じです。 したがって、前の章のすべての議論は関数にも当てはまります。

関数を作成する

スタンドアロン関数は、 CREATE FUNCTION ステートメントを使用して作成されます。 CREATE OR REPLACE PROCEDURE ステートメントの簡略化された構文は次のとおりです-

CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
{IS | AS}
BEGIN
   < function_body >
END [function_name];

どこで、

  • _function-name_は、関数の名前を指定します。
  • [OR REPLACE]オプションを使用すると、既存の関数を変更できます。
  • オプションのパラメーターリストには、パラメーターの名前、モード、およびタイプが含まれます。 INは外部から渡される値を表し、OUTはプロシージャの外部で値を返すために使用されるパラメーターを表します。
  • 関数には return ステートメントが含まれている必要があります。
  • _RETURN_句は、関数から返すデータ型を指定します。
  • _function-body_には実行可能部分が含まれます。 *スタンドアロン機能を作成するには、ISキーワードの代わりにASキーワードが使用されます。

次の例は、スタンドアロン関数を作成して呼び出す方法を示しています。 この関数は、顧客テーブルの顧客の総数を返します。

リンクで作成したCUSTOMERSテーブルを使用します:/plsql/plsql_variable_types [PL/SQL変数]章-

Select* from customers;

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
+----+----------+-----+-----------+----------+
CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
   total number(2) := 0;
BEGIN
   SELECT count(*) into total
   FROM customers;

   RETURN total;
END;
/

上記のコードがSQLプロンプトを使用して実行されると、次の結果が生成されます-

Function created.

関数を呼び出す

関数を作成するときに、関数が何をする必要があるかを定義します。 関数を使用するには、その関数を呼び出して定義済みのタスクを実行する必要があります。 プログラムが関数を呼び出すと、プログラム制御は呼び出された関数に転送されます。

呼び出された関数は定義されたタスクを実行し、returnステートメントが実行されるか、* last endステートメント*に到達すると、プログラム制御をメインプログラムに戻します。

関数を呼び出すには、必要なパラメーターと関数名を渡すだけでよく、関数が値を返す場合、戻り値を保存できます。 次のプログラムは、匿名ブロックから関数 totalCustomers を呼び出します-

DECLARE
   c number(2);
BEGIN
   c := totalCustomers();
   dbms_output.put_line('Total no. of Customers: ' || c);
END;
/

上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-

Total no. of Customers: 6

PL/SQL procedure successfully completed.

次の例は、最大2つの値を計算して返す単純なPL/SQL関数の宣言、定義および起動を示しています。

DECLARE
   a number;
   b number;
   c number;
FUNCTION findMax(x IN number, y IN number)
RETURN number
IS
    z number;
BEGIN
   IF x > y THEN
      z:= x;
   ELSE
      Z:= y;
   END IF;
   RETURN z;
END;
BEGIN
   a:= 23;
   b:= 45;
   c := findMax(a, b);
   dbms_output.put_line(' Maximum of (23,45): ' || c);
END;
/

上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-

Maximum of (23,45): 45

PL/SQL procedure successfully completed.

PL/SQL再帰関数

プログラムまたはサブプログラムが別のサブプログラムを呼び出す場合があることを確認しました。 サブプログラムがそれ自体を呼び出すとき、それは再帰呼び出しと呼ばれ、プロセスは*再帰*と呼ばれます。

概念を説明するために、数値の階乗を計算しましょう。 数nの階乗は次のように定義されます-

n! = n*(n-1)!
   = n*(n-1)*(n-2)!
      ...
   = n*(n-1)*(n-2)*(n-3)... 1

次のプログラムは、それ自体を再帰的に呼び出すことにより、所定の数の階乗を計算します-

DECLARE
   num number;
   factorial number;

FUNCTION fact(x number)
RETURN number
IS
   f number;
BEGIN
   IF x=0 THEN
      f := 1;
   ELSE
      f := x * fact(x-1);
   END IF;
RETURN f;
END;

BEGIN
   num:= 6;
   factorial := fact(num);
   dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);
END;
/

上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-

Factorial 6 is 720

PL/SQL procedure successfully completed.