14.29 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-31 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-32 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

関連トピック