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