14.15 CONTINUE文
CONTINUE文は、現行のループの反復を条件付きまたは無条件で終了し、カレント・ループまたはラベルが付けられている外側のループのいずれかの次の反復に制御を移します。
CONTINUE文でカーソルFORループを途中で終了すると(たとえば、内部ループを終了して外部ループの次の反復に制御を移すと)、カーソルはクローズします(このコンテキストでは、CONTINUEはGOTOと同様に動作します)。
CONTINUE WHEN文は、WHEN句内の条件がTRUEの場合、現行のループの反復を終了し、カレント・ループまたはラベルが付けられている外側のループのいずれかの次の反復に制御を移します。
制御がCONTINUE WHEN文に達するたびに、WHEN句内の条件が評価されます。条件がTRUEでない場合、CONTINUE WHEN文は何も実行しません。
CONTINUE文の制限
-
CONTINUE文はLOOP文内にある必要があります。 -
CONTINUE文はサブプログラムまたはメソッドの境界を越えることはできません。
ここでのトピック
セマンティクス
continue_statement
label
現在のループまたは囲みループを識別する名前です。
labelを指定しない場合、CONTINUE文はカレント・ループの次の反復に制御を移します。labelを指定すると、CONTINUE文は、labelで識別されるループの次の反復に制御を移します。
WHEN boolean_expression
この句を指定しない場合、CONTINUE文は現行のループの反復を無条件で終了します。この句を指定すると、boolean_expressionの値がTRUEの場合にのみCONTINUE文は現行のループの反復を終了します。
例
例14-12 基本LOOP文内のCONTINUE文
この例では、基本LOOP文内のCONTINUE文が無条件でカレント・ループの次の反復に制御を移します。
DECLARE x NUMBER := 0; BEGIN LOOP -- After CONTINUE statement, control resumes here DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x)); x := x + 1; IF x < 3 THEN CONTINUE; END IF; DBMS_OUTPUT.PUT_LINE ('Inside loop, after CONTINUE: x = ' || TO_CHAR(x)); EXIT WHEN x = 5; END LOOP; DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x)); END; /
結果:
Inside loop: x = 0 Inside loop: x = 1 Inside loop: x = 2 Inside loop, after CONTINUE: x = 3 Inside loop: x = 3 Inside loop, after CONTINUE: x = 4 Inside loop: x = 4 Inside loop, after CONTINUE: x = 5 After loop: x = 5
例14-13 基本LOOP文内のCONTINUE WHEN文
この例では、xが3より小さい場合、基本LOOP文内のCONTINUE WHEN文がカレント・ループの次の反復に制御を移します。
DECLARE x NUMBER := 0; BEGIN LOOP -- After CONTINUE statement, control resumes here DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x)); x := x + 1; CONTINUE WHEN x < 3; DBMS_OUTPUT.PUT_LINE ('Inside loop, after CONTINUE: x = ' || TO_CHAR(x)); EXIT WHEN x = 5; END LOOP; DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x)); END; /
結果:
Inside loop: x = 0 Inside loop: x = 1 Inside loop: x = 2 Inside loop, after CONTINUE: x = 3 Inside loop: x = 3 Inside loop, after CONTINUE: x = 4 Inside loop: x = 4 Inside loop, after CONTINUE: x = 5 After loop: x = 5
