바닥코딩

순환문 본문

데이터 베이스/오라클 PLSQL

순환문

개발공부개발공부 2021. 2. 25. 16:17

 순환문은 일정한 범위의 소스 코드 문장을 반복적으로 수행하는 기능을 제공합니다. 당연히 순환문에서는 무한루프를 방지하기 위해 탈출문이 존재하며 순환문은 LOOP, WHILE, FOR등을 제공합니다.

LOOP

BEGIN 
    LOOP --충족조건이 없는 무한 루프 
        NULLL;
    end loop;
end;

 LOOP 문의 일반적인 구조는 위와 같습니다 위와 같은 조건일 경우 LOOP 안쪽에 문장을 반복하게 되는데 따로 조건이 없기 떄문에 직접 실행을 해본다면 무한루프에 빠지는것을 확인 할 수 있습니다. 이러한 LOOP 문의 탈출 조건을 지정하기 위하여 탈출문이 존재합니다

EXIT WHEN

declare
is
 v_num number :=1;
begin
    loop
        DBMS_OUTPUT.PUT_LINE('v_num =' ||v_num);
        v_num := v_num+1;
        exit when v_num >3 ;
    end loop;
end;

 위와 같은 LOOP문에서 EXIT WHEN 이 탈출문에 해당합니다 위 코드에서는 V_NUM을 1씩 증가시키며 한줄 씩 출력을 하다 3보다 큰 수가 들어오게되면 루프문에서 빠져나오게 됩니다.  탈출문은 사실 이 것 말고도 GOTO, EXIT 등도 있지만 가장 바람직한 방법은 EXIT WHEN 이기 때문에 EXIT WHEN 만 서술 하게습니다.

WHILE

declare
    v_num number := 1;
begin
    while v_num<=3
    loop
        DBMS_OUTPUT.PUT_LINE('루프 내부 :' || v_num);
        v_num  := v_num+1;
    end loop;
    DBMS_OUTPUT.PUT_LINE('루프종료');
end;

 

 해당 코드는 WHILE문의 예입니다 위와 같이 WILE문과 같은 경우 조건을 먼저 지정하고 LOOP 를 수행하기떄문에 별도의 탈출문 없이 조건의 충족이 끝나면 순환을 종료하게 됩니다

FOR LOOP

declare
    v_cnt pls_integer;
begin
    DBMS_OUTPUT.PUT_LINE('---------------일반 for----------------') ;
    for idx in 1..3
    loop
        DBMS_OUTPUT.PUT_LINE('루프:'|| idx) ;
    end loop;
END;

 FOR LOOP 와 같은 경우 일반 FOR 문과 같이 일정한 횟수를 수행해야할떄 요긴 하게 사용할 수 있습니다 반복 횟수는  FOR [반복 변수] IN 하한값 상한값으로 이루어져 있습니다 해당 예제는 1 2 3  총 3번의 순환을 돌게 됩니다.

REVERSE

declare
    v_cnt pls_integer;
begin
    DBMS_OUTPUT.PUT_LINE('-----------reverse for----------------') ;
    for idx in  reverse 1..3   -- rever 여도 작은수 큰 수 순으로 작성
    loop     
        DBMS_OUTPUT.PUT_LINE('루프:' || idx);
    end loop;
END;

 FOR LOOP와 동일하지만 값이 3 2 1  감소하는 순환문을 작성하고 싶다면 IN REVERSE  키워드를 사용해야 합니다 단  이 경우에도 하한가 .. 상한가 로 와여 한다는 점을 유의해야 합니다(3 .. 1 X  1 .. 3  O)

CONTINUE

declare
    v_num number :=0;
begin
    loop
        v_num := v_num +1;
        exit when v_num >5;
        if v_num >3 then
            continue;
        end if;
        DBMS_OUTPUT.PUT_LINE('루프 내부:' || v_num);
    end loop;
    DBMS_OUTPUT.PUT_LINE('루프 종료' || v_num);
    DBMS_OUTPUT.PUT_LINE('---------------------------------');
    v_num := 0;
    loop
        v_num  := v_num +1;
        EXIT WHEN v_num >5;
        continue when v_num > 3;
        DBMS_OUTPUT.PUT_LINE('루프 내부:' || v_num);
    end loop;
    DBMS_OUTPUT.PUT_LINE('루프 종료' || v_num);
    DBMS_OUTPUT.PUT_LINE('---------------------------------');

end;

타 프로그래밍 언어와 같이 CONTINUE 문을 제공합니다 해당 LOOP 문은 5번 순환을 돌지만 V_NUM 이 3보다 클 경우 아래 문장을 수행하지않고 순환문 가장 상단 코드를 수행하게 됩니다.

'데이터 베이스 > 오라클 PLSQL' 카테고리의 다른 글

PL/SQL 컬렉션  (0) 2021.03.24
cursor  (0) 2021.03.24
분기문  (0) 2021.02.25
PL/SQL에서 일반 SQL 실행  (0) 2021.02.25
변수, 상수 선언 방법  (0) 2021.02.25