PSQL Programmer's Guide (v11)

ストアド プロシージャ (リレーショナル インターフェイス)

ストアド プロシージャを使用して、論理的に関連付けされたプログラミング ステップを一般的なプロセスにグループ化し、次にそのプロセスを 1 つのステートメントで呼び出すことができます。また、パラメーターを渡すことによって、異なる値でこのプロセスを実行できます。

SQL ストアド プロシージャを呼び出すと、ホスト言語のプログラムと SQL エンジンとの間で内部的な通信を行うことなく、プロシージャ全体が実行されます。ストアド プロシージャを単独で呼び出したり、ほかのプロシージャまたはトリガーの本体の一部として呼び出すことができます。トリガーの詳細については、SQL トリガーを参照してください。

ストアド プロシージャ内の SQL 変数ステートメントを使用して、ステートメントからステートメントへ値を内部に格納することができます。これらのステートメントの詳細については、SQL 変数ステートメントを参照してください。

ストアド プロシージャ内の SQL 制御ステートメントを使用して、プロシージャの実行フローを制御することができます。これらのステートメントの詳細については、この章の後半の SQL 制御ステートメントを参照してください。

ストアド プロシージャと位置付け更新

ストアド プロシージャと位置付け更新の例を次に示します。

DROP PROCEDURE curs1 
CREATE PROCEDURE curs1 (in :Arg1 char(4) ) AS   
BEGIN 
  DECLARE :alpha char(10) DEFAULT 'BA';  
  DECLARE :beta INTEGER DEFAULT 100;    
 
  DECLARE degdel CURSOR FOR    
     SELECT degree, cost_per_credit FROM tuition  
        WHERE Degree = :Arg1 AND cost_per_credit = 100 
  FOR UPDATE;   
  OPEN degdel;   
  FETCH NEXT FROM degdel INTO :alpha,:beta 
  DELETE WHERE CURRENT OF degdel; 
  CLOSE degdel; 
END 
 
CALL curs1('BA') 

ストアド プロシージャの宣言

ストアド プロシージャを定義するには、CREATE PROCEDURE ステートメントを使用します。

CREATE PROCEDURE EnrollStudent (in :Stud_id integer, in :Class_Id integer); 
 
BEGIN 
   INSERT INTO Enrolls VALUES (:Stud_id, :Class_Id, 0.0); 
END 

ストアド プロシージャ名の最大サイズは 30 文字です。パラメーター リストの両側には小かっこを付ける必要があり、パラメーター名は有効な SQL 識別子とすることができます。

ストアドプロシージャは、辞書内で一意名を持っていなければなりません。

CREATE PROCEDURE ステートメントの構文の詳細については、『SQL Engine Reference』で 「CREATE PROCEDURE」 を参照してください。

ストアド プロシージャの呼び出し

ストアド プロシージャを定義するには、CREATE ステートメントを使用します。

CALL EnrollStudent (274410958, 50); 

すべてのパラメーターに値を定義する必要があります。CALL ステートメントで関連する引数を使用するか、または CREATE PROCEDURE ステートメントの関連するデフォルトの句を使用して、パラメーターに値を指定することができます。CALL ステートメント内のパラメーターの引数値は、関連するデフォルト値に優先します。

以下の 2 つの方法のいずれかで、CALL ステートメントに呼び出し値を指定できます。

場所またはキーワードの引数リストでは、パラメーター値を 2 回指定できません。同一呼び出しで場所引数とキーワード引数の両方を使用する場合、キーワード引数は場所引数を介して値を受け取るパラメーターを参照することはできません。キーワード引数を使用する場合、同じパラメーター名を 2 度使用することはできません。

CALL ステートメントの構文の詳細については、『SQL Engine Reference』で 「CALL」 を参照してください。

ストアド プロシージャの削除

ストアド プロシージャを削除するには、DROP PROCEDURE ステートメントを使用します。

DROP PROCEDURE EnrollStudent; 

このステートメントの構文の詳細については、『SQL Engine Reference』で 「DROP PROCEDURE」 を参照してください。


ロジックの格納

SQL 変数ステートメント