FOR ステートメント

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

呼び出し

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

許可

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

構文

Read syntax diagramSkip visual syntax diagramlabel:FORfor-loop-nameAScursor-nameASENSITIVEINSENSITIVECURSORWITHOUT HOLDWITH HOLDFOR1select-statementDOSQL-routine-statementEND FORlabel
SQL-routine-statement
Read syntax diagramSkip visual syntax diagramSQL-procedure-statement;SQL-function-statement;
SQL-function-statement
Read syntax diagramSkip visual syntax diagramCALLFORWITH,common-table-expressionfullselectGET DIAGNOSTICSIFINSERTITERATELEAVEMERGEsearched-deletesearched-updateSET VariableSIGNALWHILE
Notes:
  • 1 This option can only be used in the context of an SQL procedure or a compound SQL (compiled) statement.

説明

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 ステートメントを指定します。 選択リスト内の列にはすべて名前がなければならず、同じ名前の列が 2 つあってはいけません。

トリガー、関数、メソッド、またはコンパウンド SQL (インライン化) ステートメントでは、select-statement はオプションで共通表式を持つ fullselect のみから構成されていなければなりません。

SQL プロシージャー・ステートメント
表の各行に対して呼び出すステートメントを 1 つ以上指定します。 SQL-procedure-statement を適用できるのは、SQL プロシージャーのコンテキスト内、またはコンパウンド SQL (コンパイル済み) ステートメント内に限られます。 コンパウンド SQL (コンパイル済み) ステートメントの SQL-procedure-statement を参照してください。
SQL-関数-ステートメント
表の各行に対して呼び出すステートメントを 1 つ以上指定します。 ニックネームに対する searched-update (検索更新)、searched-delete (検索削除)、 または INSERT 操作はサポートされていません。 SQL-function-statement は、SQL 関数または SQL メソッドのコンテキスト内でのみ使用できます。

ルール

  • 選択リストはユニークな列名から構成されていることが必要で、select-statement で指定されたオブジェクトは、プロシージャーが作成されたときには存在していなければなりません。そうでなければ、このオブジェクトは前の SQL プロシージャー・ステートメントで作成されなければなりません。
  • for-statement で指定されたカーソルは、for-statement の外側では参照できず、 OPEN、FETCH、または CLOSE ステートメントでは指定できません。

以下の例では、FOR ステートメントを使用して、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