|
ストアド プロシージャを使用して、論理的に関連付けされたプログラミング ステップを一般的なプロセスにグループ化し、次にそのプロセスを 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 ステートメントで関連する引数を使用するか、または CREATE PROCEDURE ステートメントの関連するデフォルトの句を使用して、パラメーターに値を指定することができます。CALL ステートメント内のパラメーターの引数値は、関連するデフォルト値に優先します。
以下の 2 つの方法のいずれかで、CALL ステートメントに呼び出し値を指定できます。
場所またはキーワードの引数リストでは、パラメーター値を 2 回指定できません。同一呼び出しで場所引数とキーワード引数の両方を使用する場合、キーワード引数は場所引数を介して値を受け取るパラメーターを参照することはできません。キーワード引数を使用する場合、同じパラメーター名を 2 度使用することはできません。
CALL ステートメントの構文の詳細については、『SQL Engine Reference』で 「CALL」 を参照してください。
ストアド プロシージャを削除するには、DROP PROCEDURE ステートメントを使用します。
このステートメントの構文の詳細については、『SQL Engine Reference』で 「DROP PROCEDURE」 を参照してください。
|