- 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 件のコメント:
コメントを投稿