FOR ステートメント

FOR ステートメントは、表の行ごとに、ステートメントまたはステートメントのグループを実行します。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン化) ステートメント
コンパウンド・ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

FOR ステートメントを呼び出すために、特権は必要ありません。 ただし、ステートメントの許可 ID には、 FOR ステートメントに組み込まれている SQL ステートメントを呼び出すために必要な特権がなければなりません。 カーソルの使用に必要な許可については、 『DECLARE CURSOR』を参照してください。

構文

構文図を読む構文図をスキップするlabel:FORfor-loop-nameAScursor-nameASENSITIVEINSENSITIVECURSORWITHOUT HOLDWITH HOLDFOR1select-statementDOSQL-routine-statementEND FORlabel
SQL-routine-statement
構文図を読む構文図をスキップするSQL-procedure-statement;SQL-function-statement;
SQL-function-statement
構文図を読む構文図をスキップするCALLFORWITH,common-table-expressionfullselectGET DIAGNOSTICSIFINSERTITERATELEAVEMERGEsearched-deletesearched-updateSET VariableSIGNALWHILE
注:
  • 1 このオプションは、SQL プロシージャーのコンテキスト内、またはコンパウンド SQL (コンパイル済み) ステートメント内でのみ使用できます。

説明

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