14.71 WHILE LOOP文

WHILE LOOP文は、条件がTRUEの場合に1つ以上の文を実行します。

ここでのトピック

条件がFALSEまたはNULLになった場合、ループの内側の文によって制御がループの外側に移されたかまたは例外が呼び出された場合に、WHILE LOOP文は終了します。

構文

セマンティクス

while_loop_statement

boolean_expression

値がTRUEFALSEまたはNULLの式です。

boolean_expressionは、ループの各反復の先頭で評価されます。値がTRUEの場合は、LOOPの後の文が実行されます。それ以外の場合は、制御がWHILE LOOP文の後の文に移ります。

statement

無限ループが発生しないように、1つ以上の文によってboolean_expressionの値をFALSEまたはNULLに変更するか、制御をループの外側に移すか、または例外を呼び出す必要があります。制御をループの外側に移すことができる文には次のものがあります。

label

while_loop_statementを識別するラベル(「statement ::=」および「ラベル」を参照)。CONTINUEEXITおよびGOTO文でこのラベルを参照できます。

LOOP文がネストされている場合は特に、ラベルによって読みやすさが向上します。ただし、END LOOP文内のラベルが、同じLOOP文の先頭のラベルと一致している場合のみです(コンパイラではチェックしません)。

例14-47 WHILE LOOP文

最初のWHILE LOOP文内の文は実行されず、2番目のWHILE LOOP文内の文が1回実行されます。

DECLARE
  done  BOOLEAN := FALSE;
BEGIN
  WHILE done LOOP
    DBMS_OUTPUT.PUT_LINE ('This line does not print.');
    done := TRUE;  -- This assignment is not made.
  END LOOP;

  WHILE NOT done LOOP
    DBMS_OUTPUT.PUT_LINE ('Hello, world!');
    done := TRUE;
  END LOOP;
END;
/

結果:

Hello, world!