SQL 制御ステートメント

制御ステートメントは SQL ステートメントの一種で、これを使用する ことで、構造化プログラミング言語でプログラムを書く場合と同じような 方法で SQL が使用できるようになります。 SQL 制御ステートメントは、ロジック・フローを制御し、変数の宣言と設 定をし、警告および例外を処理する能力を提供します。 一部の SQL 制御ステートメントには、ネストされた他の SQL ステートメント が組み込まれることもあります。

構文図を読む構文図をスキップする
SQL-control-statement

|--+-assignment-statement------+--------------------------------|
   +-CALL-statement------------+   
   +-CASE-statement------------+   
   +-compound-statement--------+   
   +-FOR-statement-------------+   
   +-GET DIAGNOSTICS-statement-+   
   +-GOTO-statement------------+   
   +-IF-statement--------------+   
   +-ITERATE-statement---------+   
   +-LEAVE-statement-----------+   
   +-LOOP-statement------------+   
   +-PIPE-statement------------+   
   +-REPEAT-statement----------+   
   +-RESIGNAL-statement--------+   
   +-RETURN-statement----------+   
   +-SIGNAL-statement----------+   
   '-WHILE-statement-----------'   

制御ステートメントは、SQL プロシージャー、 SQL 関数、SQL トリガー、および複合 (動的) ステートメント 内でサポートされます

SQL プロシージャーは、CREATE PROCEDURE ステートメントに SQL ルーチン本体を 指定して作成します。 SQL 関数は、CREATE FUNCTION ステートメントに SQL ルーチン本体を指定して作成します。 SQL ルーチンは、SQL プロシージャーまたは SQL 関数です。 SQL トリガーは、CREATE TRIGGER ステートメントに SQL ルーチン本体を 指定して作成します。 複合 (動的) ステートメントは、SQL ルーチン本体を複合 (動的) ステートメント に指定することによって定義されます。

SQL プロシージャーは変更も可能です。その場合は、新しい SQL ルーチン本体を ALTER PROCEDURE ステートメントに指定します。SQL 関数も変更が可能です。 この場合は、新しい SQL ルーチン本体を ALTER FUNCTION ステートメントに指定します。

SQL ルーチン本体は、単一の SQL ステートメントでなけ ればならず、SQL 制御ステートメントであっても構いません。

SQL ルーチン本体は、プロシージャー、関数、またはトリガーの実行可能部分で、データベース・マネージャーによってプログラムまたはサービス・プログラムに変換されます。 SQL ルーチン、トリガーまたはグローバル変数が作成されるときに、SQL は、組み込み SQL ス テートメントを含む C ソース・コードが入った一時ソース・ファイル (QTEMP/QSQLSRC および QTEMP/QSQLT00000) を作成します。 SQL がこれらの一時ソース・ファイルを作成する場合、 レコード長 160 が使用され、ソース・ステートメントの CCSID 値が新規ファイルの CCSID 値として設定されます。 これらのソース・ファイルのいずれかがある場合、必要であればソースと同じ CCSID を持つように変更されます。これらのソース・ファイルの レコード長は 160 にする必要があります。そうでないと、予期しない結果が発生する可能性があります。 ソース・ファイル・メンバーの名前は、ルーチン、トリガー、またはグローバル変数のシステム名と同じです。 DBGVIEW(*SOURCE) が指定されていた場合は、SQL はルーチンまたはトリガー用のルート・ソースを、プロシージャー、関数、またはトリガーと同じライブラリーにあるソース・ファイル QSQDSRC の中に作成します。

SQL プロシージャーまたは SQL トリガーは、CRTPGM コマンドを使用してプログラム (*PGM) オブジェクトとして作成されます。 SQL 関数は、CRTSRVPGM コマンドを使用してサービス・プログラム (*SRVPGM) オブジェクトとして作成されます。 このプログラムまたはサービス・プログラムは、プロシージャー名、関数 名、またはトリガー名の暗黙的または明示的な修飾子となるライブラリー内に作成 されます。

プログラムまたはサービス・プログラムが作成されると、特定の制御ステートメン ト以外の SQL ステートメントは、そのプログラムまたはサービス・プログラ ム内の組み込み SQL ステートメントになります。 CALL、SIGNAL、RESIGNAL、および GET DIAGNOSTIC 制御ステートメントも、 そのプログラムまたはサービス・プログラム内の組み込み SQL ステートメントになります。

指定されたプロシージャーまたは関数は、SYSROUTINES および SYSPARMS カタログ表内で登録され、 プログラムに対する内部リンクが SYSROUTINES から作成されます。 プロシージャーが SQL CALL ステートメントを使用して呼び出されるとき、 あるいは関数が SQL ステートメント内で呼び出されるときに、そのルーチンに関連したプログラムが呼び出されます。 指定された SQL トリガーは、SYSTRIGGER カタログ表内で登録されます。