リファレンスガイド> TDV SQLスクリプト> SQLスクリプトステートメントリファレンス> FOR
 
<g1>FOR</g1>
FORステートメントはSQLスクリプトで使用され、クエリまたはカーソルをループします。 FORステートメントには2つの形式があります。
構文1
クエリ式をループするために使用されます。
[<label>:]
FOR <loopVariable> AS [<cursorName> CURSOR FOR]
<queryExpression> DO
<statements>
END FOR [<label>]
構文2
カーソルをループするために使用されます。詳細については、型変数のカーソルの宣言を参照してください。
[<label>:]
FOR <loopVariable> AS <cursorVariable> DO
<statements>
END FOR [<label>]
備考
<label>は、ブロックに名前を付けるためのオプションの識別子です。これは、LEAVEおよびITERATEステートメントで使用するためのものです。 LEAVEおよびITERATEを参照してください。
開始ラベルが存在する場合、終了ラベルは必要ありません。開始ラベルが存在しない場合、終了ラベルを付けることは違法です。開始ラベルと終了ラベルの両方が存在する場合は、両方が同じIDを持っている必要があります。
<statements>領域には0個以上のステートメントが存在する可能性があります。
FORステートメントは、ループ変数がクエリ式(ROW)に一致する適切なタイプであることを宣言します。その変数を他の場所で宣言する必要はありません。変数はループブロック内でのみ有効です。この変数は、現在のスコープ(または親スコープ)内の別の変数と同じ名前にすることができますが、プロシージャーのパラメーターと同じ名前にすることはできません。同じ名前の場合は、複合ステートメントで変数を宣言する場合と同じルールが適用されます。詳細については、複合ステートメントを参照してください。
カーソル変数が最初の形式(構文1)で提供されている場合は、この時点でも宣言されます。個別に宣言することはありません。この変数は、提供されたクエリ式のカーソルとして設定されます。
カーソルは起動時に開きます。カーソルを開く必要はありません。次に、行を一度に1つずつフェッチし(FETCHを使用)、その行をループ変数に割り当てます。これにより、各行を一度に1つずつ操作できます。ループが終了すると、カーソルは自動的に閉じます。 FETCHを参照してください。
カーソルを開くと(さらに数行をフェッチすると)、FORループはカーソルのある場所をピックアップします。カーソルを開かない場合、FORステートメントがカーソルを開きます。
FORループは、ループがどのように終了しても(LEAVEステートメントを使用している場合でも)カーソルを閉じます。
FORループにカーソルが渡されると、カーソルがまだ開いていない場合はカーソルが開きます。
FORループの後、カーソルが閉じます。 FORループを離れようとしても、カーソルは閉じています。 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