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テーブル内のCUSTOMERSの総数を返します。

PL / SQL変数の章で作成したCUSTOMERS表を使用します。

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 statement に達すると、プログラム制御をメインプログラムに戻します。

関数を呼び出すには、必要なパラメーターを関数名と一緒に渡すだけで、関数が値を返す場合は、戻り値を保存できます。次のプログラムは関数を呼び出します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再帰関数

プログラムまたはサブプログラムが別のサブプログラムを呼び出す可能性があることを確認しました。サブプログラムがそれ自体を呼び出すとき、それは再帰呼び出しと呼ばれ、プロセスは次のように知られています。recursion

概念を説明するために、数値の階乗を計算してみましょう。数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.