바닥코딩
순환문 본문
순환문은 일정한 범위의 소스 코드 문장을 반복적으로 수행하는 기능을 제공합니다. 당연히 순환문에서는 무한루프를 방지하기 위해 탈출문이 존재하며 순환문은 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 |