指定された条件が真と評価されるまで、1つ以上の文の実行を繰り返します。
ANSI準拠
REPEATは、ANSI/ISO SQL:2011に準拠しています。
必要な権限
なし。
呼び出し
実行可能形式。
ストアド プロシージャのみ。
構文
[ label_name : ] REPEAT statement [...] UNTIL conditional_expression END REPEAT [ label_name ] ;
構文要素
- label_name
- REPEAT文のオプションのラベル
- statement
- 実行される文のリスト。
- conditional_expression
- REPEATループに組み込まれている1つ以上の文を実行するかどうかを評価するために使用されるブール条件。
使用上の注意
- REPEAT文をラベル名で修飾することができます。REPEATにラベル名を使用すると、次のようになります。
- ブロック内のLEAVE文でそのラベル名を使えば、REPEAT文を抜け出ることができます。
- ブロック内にITERATE文を指定し、しかもそれがREPEATに関連したラベルを参照していると、UNTIL句で指定した条件式は評価されないで、REPEAT文の先頭から実行が続行されます。
- 例外処理
REPEAT文内の文またはUNTIL句の条件式が例外を生じた場合に、その例外条件を処理するハンドラーがストアド プロシージャ内に備えられているときの処置行動は、WHILE文内で発生した例外の場合と同じです。
- REPEATとWHILEの相違
REPEAT - END REPEATはWHILE - END WHILE文と類似していますが、次のような違いがあります。
REPEAT… WHILE … 無条件で最初の繰返しを実行します。 REPEATは、常に文シーケンスを少なくとも1回実行します。
指定されている条件が真になった場合のみ、最初の繰返しとその後の繰返しを実行します。 指定の条件が満たされるまで文を実行します。 指定の条件が満たされている限り文を実行します。
例: 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を参照してください。