PL SQL

PL/SQL 반복문 (Basic LOOP, WHILE LOOP, FOR LOOP, 중첩 루프 및 레이블)

n.han 2016. 7. 7. 17:23

[반복문]

 

- Basic Loop : LOOP END LOOP 키워드 사이의 LOOP 블록을 계속 수행한다. 도중에 EXIST WHEN 절이 만족되면 LOOP를 탈출한다.

 

LOOP
  statement1;
  . . .
  EXIT [WHEN condition];
END LOOP;

 

- While Loop : 일반적인 WHILE Loop와 유사하다.

 

WHILE condition LOOP
    statement1;
    statement2;
    . . .
END LOOP;

 

- For Loop : lower_bound..upper_bound이므로, lower_bound upper_bound 보다 큰 경우 FOR 루프를 진입하지 않는다. 따라서 REVERSE 키워드를 넣으면 반대로 counter가 내려간다.

루프 안에 카운터만 참조해야 하며, 루프 밖에는 카운터가 정의되어 있지 않다. 또한 카운터를 할당 대상으로 참조하는 것을 피해야하며, 루프의 상한이나 하한을 NULL일 수 없다.

 

FOR counter IN [REVERSE]
       lower_bound..upper_bound LOOP
    statement1;
    statement2;
    . . .
END LOOP;

 

- 중첩 루프 및 레이블
1) 다중 레벨로 루프를 중첩시킬 수 있다.

2) 블록과 루프의 구분에 레이블을 사용한다.

3) 레이블을 참조하는 EXIT 문을 사용하여 외부 루프를 종료한다.

 

...
BEGIN
    <<Outer_loop>>
    LOOP
        v_counter := v_counter+1;
    EXIT WHEN v_counter>10;
        <<Inner_loop>>
        LOOP
            ...
            EXIT Outer_loop WHEN total_done = 'YES';
            -- Leave both loops
            EXIT WHEN inner_done = 'YES';
            -- Leave inner loop only
            ...
        END LOOP Inner_loop;
        ...
    END LOOP Outer_loop;
END;
/