PL/SQL의 반복문


1) BASIC LOOP
조건 없이 반복 작업을 제공하기 위한 반복뭄ㄴ

[ 형식 ]
LOOP
statements1;
statements2;
.....
EXIT [WHEN condition]
END LOOP


예제) BASIC LOOP문으로 1에서 5까지 출력

DECLARE

  N NUMBER := 1;

BEGIN

  LOOP  

  DBMS_OUTPUT.PUT_LINE(N);

  N := N + 1;

    IF N > 5 THEN

    EXIT;

    END IF;

  END LOOP;

END;

/


결과)

PL/SQL 프로시저가 성공적으로 완료되었습니다.

1

2

3

4

5



문제) 구구단 중 5단 출력
DECLARE
  DAN NUMBER := 5;
  I NUMBER := 1;
BEGIN
  LOOP  
  DBMS_OUTPUT.PUT_LINE(DAN || ' * ' || I || ' = ' || (DAN*I));
  I := I + 1;
    IF I > 9 THEN EXIT;
    END IF;
  END LOOP;
END;
/

결과)
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45



2) FOR LOOP
반복되는 횟수가 정해진 반복문을 처리할 때 사용

[ 형식 ]
FOR index_counter IN [REVERSE] lower_bound..upper_bound LOOP
statements1;
statements2;
.....
END LOOP


index_counter : upper_bound나 lower_bound에 도달할 때까지 반복하여 증가되는 값을 가진 암시적으로 선언된 변수

REVERSE : upper_bound에서 lower_bound까지 반복하여 인덱스가 1씩 감소

lower_bound : 시작값

upper_bound : 종료값


예제) FOR LOOP문으로 1에서 5까지 출력

DECLARE

BEGIN

  FOR N IN 1..5 LOOP

  DBMS_OUTPUT.PUT_LINE(N);

  END LOOP;

END;

/




문제) FOR문으로 부서번호를 계산 후 이를 SELECT문의 WHERE절에 지정하여 부서정보를 얻어오는 예제

DECLARE

  VDEPT DEPT%ROWTYPE;

BEGIN

  DBMS_OUTPUT.PUT_LINE('부서번호 / 부서명 / 지역명');

  DBMS_OUTPUT.PUT_LINE('----------------------------');

  

  -- CNT는 1부터 1씩 증가하다가 4가 되면 반복문을 벗어남.

  FOR CNT IN 1..4 LOOP  

    SELECT * INTO VDEPT FROM DEPT

    WHERE DEPTNO = 10* CNT;  

    DBMS_OUTPUT.PUT_LINE(VDEPT.DEPTNO||'/'||VDEPT.DNAME||'/'||VDEPT.LOC);

  END LOOP;

END;

/


결과)

부서번호 / 부서명 / 지역명

----------------------------

10/ACCOUNTING    /NEW YORK     

20/RESEARCH      /DALLAS       

30/SALES         /CHICAGO      

40/OPERATIONS    /BOSTON   






3) WHILE LOOP
제약 조건이 TRUE인 동안만 반복할 때 사용

[ 형식 ]
WHILE condition LOOP
statements1;
statements2;
.....
END LOOP


예제) WHILE LOOP문으로 1에서 5까지 출력

DECLARE

  N NUMBER := 1;

BEGIN

  WHILE N <= 5 LOOP

  DBMS_OUTPUT.PUT_LINE(N);

  N := N+1;

  END LOOP;

END;

/

  


문제) WHILE LOOP문으로 별(*)을 삼각형으로 출력하는 예

DECLARE 

  V_CNT NUMBER := 1;

  V_STR VARCHAR2(10) := NULL;

BEGIN

  WHILE V_CNT <= 5 LOOP

    V_STR := V_STR || '*';

    DBMS_OUTPUT.PUT_LINE(V_STR);

    V_CNT := V_CNT + 1;

  END LOOP;  

END;

/


결과)

PL/SQL 프로시저가 성공적으로 완료되었습니다.


*

**

***

****

*****





  

Posted by netyhobby
,