본문 바로가기
DB

[SQL] PL/SQL – 반복문(LOOP,FOR,WHILE)

by chan10 2021. 3. 25.

반복문(LOOP, FOR, WHILE)

BASIC LOOP

 특정 조건까지만 반복문을 수행하며 EXIT 예약어에 반복을 중지할 수 있는 조건을 작성한다.

o  EXIT는 실행하는반복문을 빠져나오는 예약어로 EXIT가 없을 경우 무한 루프에 빠질 수 있다.

o  사용형식

     LOOP

         실행할 구문

         EXIT 조건문

     END LOOP

1~10까지 출력하기

 

DECLARE

    I NUMBER :=1;

BEGIN

   LOOP

       DBMS_OUTPUT.PUT_LINE(I);

       I:=I+1;

--       IF I>10 THEN EXIT;    -- IF문을 활용한 EXIT 실행

--       END IF;               -- IF문 또는 EXIT WHEN I>10;

       EXIT WHEN I>10;

    END LOOP;

END;

/

  

FOR

o  FOR문은 FOR EACH문과 비슷하게 사용할 수 있다.

o  인덱스 값을 DECLARE에서 선언하지 않아도 되기에 반복문 중 간결하게 사용할 수 있다.

o  사용 형식

     FOR 변수 IN 범위||SELECT LOOP

          실행 구문

     END LOOP;

* 범위 : 시작숫자..끝숫자 -> FOR문의 변수에 범위의 숫자가 순차적으로 대입됨.

* SELECT : SELECT문의 ROW가 변수에 저장된다.

1부터 10까지 출력하기

BEGIN

    FOR I IN 1..10 LOOP

        DBMS_OUTPUT.PUT_LINE(I);

    END LOOP;

END;

/

 

-- 역순으로 출력 (REVERSE)

BEGIN

    FOR I IN REVERSE 1..10 LOOP

        DBMS_OUTPUT.PUT_LINE(I);

    END LOOP;

END;

/

 

EMPLOYEE에 있는 10개의 ROW출력하기

EMP_ID, EMP_NAME, SALARY 시작은 EMP_ID 200부터 209까지 출력

 

DECLARE

    E EMPLOYEE%ROWTYPE;

    V_EMP_ID EMPLOYEE.EMP_ID%TYPE;

BEGIN

    V_EMP_ID:=200;

    FOR K IN 1..10 LOOP       -- FOR 방법 1

        SELECT *

        INTO E

        FROM EMPLOYEE

        WHERE EMP_ID=V_EMP_ID;

        V_EMP_ID:=V_EMP_ID+1;

        DBMS_OUTPUT.PUT_LINE(E.EMP_ID||E.EMP_NAME||E.SALARY);

    END LOOP;

 

    FOR K IN (SELECT * FROM EMPLOYEE) LOOP     -- FOR 방법 2

        DBMS_OUTPUT.PUT_LINE(K.EMP_ID||K.EMP_NAME||K.SALARY);

        EXIT WHEN K.EMP_ID='209';

    END LOOP;   

END;

/

 

WHILE

 WHILE문은 LOOP EXIT 조건문을 WHILE 다음으로 작성하는 것만 다르고 나머지는 LOOP와 동일하다.

o  사용형식

     WHILE 조건식 LOOP

         실행할 구문

         EXIT 조건문

     END LOOP

DECLARE

    I NUMBER :=1;

BEGIN

    WHILE(I<10)

    LOOP

    DBMS_OUTPUT.PUT_LINE(I);

    I:=I+1;

    END LOOP;

END;

/