EXIT文
EXIT文は、現行のループの反復を条件付きまたは無条件で終了し、カレント・ループまたはラベルが付けられている外側のループのいずれかの最後に制御を移します。
EXIT WHEN文は、WHEN句内の条件がTRUEの場合、現行のループの反復を終了し、カレント・ループまたはラベルが付けられている外側のループのいずれかの最後に制御を移します。
制御がEXIT WHEN文に達するたびに、WHEN句内の条件が評価されます。条件がTRUEでない場合、EXIT WHEN文は何も実行しません。無限ループが発生しないように、ループの内側の文で条件がTRUEになるようにする必要があります。
EXIT文の制限
EXIT文はLOOP文内にある必要があります。
ここでのトピック
構文
セマンティクス
exit_statement
label
現在のループまたは囲みループを識別する名前です。
labelを指定しない場合、EXIT文はカレント・ループの最後に制御を移します。labelを指定すると、EXIT文は、labelで識別されるループの最後に制御を移します。
WHEN boolean_expression
この句を指定しない場合、EXIT文は現行のループの反復を無条件で終了します。この句を指定すると、boolean_expressionの値がTRUEの場合にのみEXIT文は現行のループの反復を終了します。
例
例14-26 EXIT文が含まれている基本LOOP文
この例では、基本LOOP文内のEXIT文が無条件でカレント・ループの最後に制御を移します。
DECLARE x NUMBER := 0; BEGIN LOOP DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x)); x := x + 1; IF x > 3 THEN EXIT; END IF; END LOOP; -- After EXIT, control resumes here 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: x = 3 After loop: x = 4
例14-27 EXIT WHEN文が含まれている基本LOOP文
この例では、xが3より大きい場合、基本LOOP文の内側のEXIT WHEN文が現行のループの最後に制御を移します。
DECLARE x NUMBER := 0; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('Inside loop: x = ' || TO_CHAR(x)); x := x + 1; -- prevents infinite loop EXIT WHEN x > 3; END LOOP; -- After EXIT statement, control resumes here 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: x = 3 After loop: x = 4
