DB/Oracle/PLSQL/反復

目次

反復処理。繰り返し。LOOP、WHILE、FOR。


LOOP 文

単なるループ。

  • LOOP 文
    ...
    begin
        loop
            -- 繰り返す処理を記述
            ...
    
            -- exit 文でループを出る
            exit;
    
            -- 終了条件も指定可
            exit when ... ;
        end loop;
    end;
    

WHILE 文

ちょっと高級なループ。

LOOP 文と同じく、EXIT を途中にいれられる。つまるところの BREAK。

  • WHILE 文
    ...
    begin
        -- 条件式が TRUE のときはループ
        while hoge > 10 loop
            -- 繰り返す処理を記述
            ...
        end loop;
    end;
    

FOR 文

FOR による、カウンタ変数を使ったループ。

インクリメントされる量は 1 で固定。step 2 みたいなことはできない。

カウンタ変数は宣言する必要はない。宣言済み変数と同じ名前のカウンタも利用はできるけれども、内部的には別の変数として扱われる。

これも LOOP 文や WHILE 文と同じく、EXIT を入れられる。

  • FOR 文
    ...
    begin
        -- c を 1 から 10 までインクリメントさせて中の処理を繰り返す
        -- カウンタ変数は宣言不要
        for c in 1..10 loop
            -- 繰り返す処理を記述
            ...
        end loop;
    
        -- デクリメントさせるには reverse を指定する
        for c in reverse 1..10 loop
            ...
        end loop;
    end;
    

カーソル FOR ループ

カーソルと組み合わせると、複数行の検索結果に対する FOR EACH 文っぽい動きができる。

詳細は別ページに記述。

ループのネスト

当たり前だけどネストも可能。

END LOOP にラベルを付加すると、内側のループの終了時に外側のループも終了できる

  • ループのネスト
    begin
        -- 単純なネスト
        loop
            loop
                ...
                exit when ...;
            end loop;
            exit when ...;
        end loop;
    
        -- ラベルを利用したネスト
        <<hoge>> 
        loop
            loop
                ...
                exit when ...;
            -- 外側のラベルを指定することで対応するループも終了させる
            end loop hoge;
        end loop;
    end;
    

スキップ

CONTINUE。ループの途中で処理をやめて、次のループを開始する。

LOOP でも、WHILE でも、FOR でも使える。

  • CONTINUE 文
    begin
        loop
            ....
            -- 条件を満たしたら以降の処理をせずに次のループを開始する
            continue when ...;
            ....
        end loop;
    
    end;
    

Last-modified: 2011-11-08 (火) 15:39:52