FOR

FOR ステートメントは SQL スクリプトで使用され、クエリまたはカーソルをループします。FOR ステートメントには 2 つの形式があります。

構文 1

クエリ式をループするために使用されます。

[<label>:]  
FOR <loopVariable> AS [<cursorName> CURSOR FOR]
<queryExpression> DO
<statements>
END FOR [<label>]

構文 2

カーソルを横切るループに使用されます。詳細は、「DECLARE CURSOR 型変数」を参照してください。

[<label>:]  
FOR <loopVariable> AS <cursorVariable> DO
<statements>
END FOR [<label>]

備考

<label> は、ブロックに名前を付けるオプションの識別子です。これは、LEAVE および ITERATE ステートメントで使用するためのものです。「LEAVE」と「ITERATE」を参照してください。
開始ラベルが存在する場合、終了ラベルは必要ありません。開始ラベルがない場合、終了ラベルを持つことはできません。開始ラベルと終了ラベルの両方が存在する場合、両方が同じ識別子を持つ必要があります。
<statements> エリアには、0 個以上のステートメントを含めることができます。
FOR ステートメントは、ループ変数がクエリ式 (ROW) と一致する適切な型であることを宣言します。その変数を別の場所で宣言する必要はありません。変数は、ループ ブロック内でのみ有効です。この変数は、現在のスコープ (または親スコープ) 内の別の変数と同じ名前を持つことができますが、プロシージャへのパラメーターと同じ名前を持つことはできません。同じ名前の場合は、複合ステートメントで変数を宣言する場合と同じ規則が適用されます。詳細については、「複合ステートメント」を参照してください。
カーソル変数が最初の形式 (構文 1) で指定されている場合は、この時点でも宣言されます。個別に宣言しません。この変数は、指定されたクエリ式のカーソルとして設定されます。
カーソルは開始時に開かれます。カーソルを開く必要はありません。次に、行を 1 つずつフェッチし (FETCH を使用)、その行をループ変数に割り当てます。これにより、各行を一度に 1 つずつ操作できます。ループが終了すると、カーソルは自動的に閉じられます。「FETCH」を参照してください。

カーソルを開くと (さらに数行をフェッチすると)、FOR ループはカーソルのある場所をピックアップします。カーソルを開かない場合、FOR ステートメントがカーソルを開きます。

FOR ループは、ループがどのように終了しても (LEAVE ステートメントを使用している場合でも) カーソルを閉じます。

FOR ループにカーソルが渡されると、カーソルがまだ開いていない場合は開きます。
FOR ループの後、カーソルは閉じられます。FOR ループを LEAVE しようとしても、カーソルは閉じられます。FOR ループで使用されたカーソルをクローズしようとすると、エラーが発生します。

--Returns the average of all scores
PROCEDURE avr_score (OUT result INTEGER) 
BEGIN
  DECLARE crs CURSOR FOR
    SELECT name, score FROM /shared/U ORDER BY score DESC;
  DECLARE total INTEGER DEFAULT 0;
  DECLARE cnt INTEGER DEFAULT 0;
  OPEN crs;
  FOR r AS crs DO
    SET total = total + r.score;
    SET cnt = cnt + 1;
  END FOR;
  SET result = total/cnt;
END