FOR ステートメント
FOR ステートメントは、表の行ごとに、ステートメントまたはステートメントのグループを実行します。
呼び出し
このステートメントは、以下の対象に組み込むことができます。
- SQL プロシージャー定義
- コンパウンド SQL (コンパイル済み) ステートメント
- コンパウンド SQL (インライン化) ステートメント
許可
FOR ステートメントを呼び出すために、特権は必要ありません。 ただし、ステートメントの許可 ID には、 FOR ステートメントに組み込まれている SQL ステートメントを呼び出すために必要な特権がなければなりません。 カーソルの使用に必要な許可については、 『DECLARE CURSOR』を参照してください。
構文
説明
- label
- FOR ステートメントのラベルを指定します。 開始ラベルが指定された場合、そのラベルは LEAVE および ITERATE ステートメントで使用できます。 終了ラベルを指定する場合、そのラベルは開始ラベルと同じでなければなりません。
- for-loop-name
- FOR ステートメントをインプリメントするために生成された暗黙的コンパウンド・ステートメントのラベルを指定します。 FOR ステートメント内の ITERATE および LEAVE ステートメントで使用できないことを除いては、 コンパウンド・ステートメントのラベルの規則に従います。 for-loop-name は、指定された select-statement によって返された列名を修飾するために使用します。
- cursor-name
- SELECT ステートメントの結果表から行を選択するために使用されるカーソルを指定します。 指定しない場合は、データベース・マネージャーがユニークなカーソル名を生成します。 ASENSITIVE、INSENSITIVE、WITHOUT HOLD または WITH HOLD の説明については、「DECLARE CURSOR」を参照してください。
- select-statement
- カーソルの SELECT ステートメントを指定します。
選択リスト内の列にはすべて名前がなければならず、同じ名前の列が 2 つあってはいけません。
トリガー、関数、メソッド、またはコンパウンド SQL (インライン化) ステートメントでは、select-statement はオプションで共通表式を持つ fullselect のみから構成されていなければなりません。
- SQL-procedure-statement
- 表の各行に対して呼び出すステートメントを 1 つ以上指定します。 SQL-procedure-statement を適用できるのは、SQL プロシージャーのコンテキスト内、またはコンパウンド SQL (コンパイル済み) ステートメント内に限られます。『コンパウンド SQL (コンパイル済み)』ステートメントの SQL-procedure-statement を参照してください。
- SQL-function-statement
- 表の各行に対して呼び出すステートメントを 1 つ以上指定します。 ニックネームに対する searched-update (検索更新)、searched-delete (検索削除)、 または INSERT 操作はサポートされていません。 SQL-function-statement は、SQL 関数または SQL メソッドのコンテキスト内でのみ使用できます。
規則
- 選択リストはユニークな列名から構成されていることが必要で、select-statement で指定されたオブジェクトは、プロシージャーが作成されたときには存在していなければなりません。そうでなければ、このオブジェクトは前の SQL プロシージャー・ステートメントで作成されなければなりません。
- for-statement で指定されたカーソルは、for-statement の外側では参照できず、 OPEN、FETCH、または CLOSE ステートメントでは指定できません。
例
下の例では、for-statement は
employee 表全体を繰り返すために使用されています。
表の中の行ごとに、SQL 変数 fullname は、
従業員のラストネーム (姓)、コンマ、ファーストネーム (名)、ブランク・スペース、
そしてミドルネームのイニシャルという順序で設定されます。
fullname の各値は、表 tnames に挿入されます。
BEGIN ATOMIC
DECLARE fullname CHAR(40);
FOR vl AS
SELECT firstnme, midinit, lastname FROM employee
DO
SET fullname = lastname CONCAT ','
CONCAT firstnme CONCAT ' ' CONCAT midinit;
INSERT INTO tnames VALUES (fullname);
END FOR;
END