- FOR LOOP
- WHILE LOOP(前判定ループ)
- LOOP(後判定ループ)
FOR LOOP
決められた回数ループ処理を行います。
FOR カウンタ変数 IN 初期値..最大値 LOOP 繰り返し処理; END LOOP;
1~9までの値を出力します。
DECLARE BEGIN FOR counter IN 1..9 LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); END LOOP; END;
REVERSEを指定すると最大値から最小値までの値を出力します。
FOR カウンタ変数 IN REVERSE 初期値..最大値 LOOP 繰り返し処理; END LOOP;
9~1までの値を出力します。
DECLARE BEGIN FOR counter IN REVERSE 1..9 LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); END LOOP; END;
初期値、最大値は変数を指定することも可能です。
DECLARE first NUMBER; last NUMBER; BEGIN first := 1; last := 9; FOR counter IN first..last LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); END LOOP; END;
WHILE LOOP(前判定ループ)
WHILE LOOP文は、条件に一致する間ループ処理を実行します。
条件に一致しなければ、ループ処理が1回も実行されないことがあります。
WHILE 条件 LOOP 条件に一致する間、繰り返す処理; END LOOP;
counter変数が10以下の場合にみ、ループ処理を実行します。
DECLARE counter NUMBER(2); BEGIN counter := 0; WHIlE counter < 10 LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); counter := counter + 1; END LOOP; END;
LOOP(後判定ループ) と EXIT文、EXIT WHEN文
このループ処理は終了条件を書かないと無限ループになります。
LOOP 繰り返す処理; END;ループ終了条件はEXIT文またはEXIT WHEN文で指定します。
EXIT文はループ処理を無条件で終了します。
EXIT WHEN文はWHEN句の条件に一致するとループ処理を終了します。
1~9を出力します。
EXIT文を利用して、counter変数が10になたらループ処理を終了します。
DECLARE counter NUMBER; BEGIN counter := 1; LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); counter := counter + 1; IF ( counter = 10) THEN EXIT; END IF; END LOOP; END;
1~9を出力します。
EXIT WHEN文を利用して、counter変数が10になたらループ処理を終了します。
DECLARE counter NUMBER; BEGIN counter := 1; LOOP SYS.DBMS_OUTPUT.PUT_LINE(counter); counter := counter + 1; EXIT WHEN counter = 10; END LOOP; END;
EXIT文、EXIT WHEN文は、LOOP文だけでなくWHILE LOOP文やFOR LOOP文でも使用できます。
CONTINUE文
11g以降はCONTINUE、CONTINUE WHENにより現行のループをスキップできます。
CONTINUE文を使用して、カウンター変数が偶数の場合はループ処理をスキップします。
DECLARE BEGIN FOR counter IN 1..9 LOOP IF ( counter MOD 2 = 0 ) THEN CONTINUE; END IF; --出力:1 3 5 7 9 SYS.DBMS_OUTPUT.PUT_LINE(counter); END LOOP; END;CONTINUE WHEN文を使用して、カウンター変数が偶数の場合はループ処理をスキップします。
DECLARE BEGIN FOR counter IN 1..9 LOOP CONTINUE WHEN counter MOD 2 = 0; --出力:1 3 5 7 9 SYS.DBMS_OUTPUT.PUT_LINE(counter); END LOOP; END;11g以前でCONTINUEと同様の処理を行うには、ラベルを使用した方法があります。 またループをネストした多重ループで、スキップしたいループや終了したいループを指定するときにもラベルが使用できます。 詳しくはコチラ「PLSQL 制御文 ~GOTO文とラベル、NULL文~ 」
0 件のコメント:
コメントを投稿