目的
指定された条件が真と評価されるまで、1つ以上の文の実行を繰り返します。
呼び出し
実行可能形式。
ストアド プロシージャのみ。
構文
- label_name
- REPEAT文のオプションのラベル
- statement
- 実行される文のリスト。
- conditional_expression
- REPEATループに組み込まれている1つ以上の文を実行するかどうかを評価するために使用されるブール条件。
ANSI準拠
REPEATは、ANSI/ISO SQL:2011に準拠しています。
許可
なし。
例外処理
REPEAT文内の文またはUNTIL句の条件式が例外を生じた場合に、その例外条件を処理するハンドラーがストアド プロシージャ内に備えられているときの処置行動は、WHILE文内で発生した例外の場合と同じです。
REPEATとWHILEの相違
REPEAT - END REPEATはWHILE - END WHILE文と類似していますが、次のような違いがあります。
REPEAT… | WHILE … |
---|---|
無条件で最初の繰返しを実行します。 REPEATは、常に文シーケンスを少なくとも1回実行します。 |
指定されている条件が真になった場合のみ、最初の繰返しとその後の繰返しを実行します。 |
指定の条件が満たされるまで文を実行します。 | 指定の条件が満たされている限り文を実行します。 |
ルール
REPEAT文をラベル名で修飾することができます。REPEATにラベル名を使用すると、次のようになります。
- ブロック内のLEAVE文でそのラベル名を使えば、REPEAT文を抜け出ることができます。
- ブロック内にITERATE文を指定し、しかもそれがREPEATに関連したラベルを参照していると、UNTIL句で指定した条件式は評価されないで、REPEAT文の先頭から実行が続行されます。
例: REPEAT文の使用
REPEAT文の使用例を以下に示します。
CREATE PROCEDURE ProcessTrans(IN pAcctNum INTEGER IN pStartTrans INTEGER, IN pEndTrans INTEGER ) BEGIN DECLARE vTransNum INTEGER; SET vTransNum = pStartTrans; ...; REPEAT INSERT INTO trans (trans_num, acct_nbr) VALUES (vTransNum, pAcctNum); SET vTransNum = vTransNum + 1; UNTIL vTransNum > pEndTrans END REPEAT; ...; END;
関連トピック
例外を管理するルールについては、LEAVEを参照してください。