[본문스크랩] PL/SQL (7) - 조건문 사용

오라클 | 2007. 12. 21. 15:28
Posted by 시반

###################################################################################################

#   source site : blog.naver.com/tangamjaelt

#   master : 강용운

#   email : tangamjaelt@korea.com

#   last release : 2007.05.28

###################################################################################################

 

1. IF 문

**********************************************************************************************************************

IF (조건)

THEN

     (조건이 참일 경우 수행)

ELSE

     (조건이 참이 아닐 경우 수행)

END IF;

**********************************************************************************************************************

 

 

2. 중첩 IF 문

**********************************************************************************************************************

IF (조건1)

THEN

     IF (조건2)

     THEN

            (조건1,2 모두 참일 경우 실행)

     ELSE 

           IF (조건3) 

           THEN

                 (조건1,2 참이 아니고, 조건3 이 참일 경우 실행)

            ELSE

                 (조건1,2,3 모두 거짓일 경우 실행)

            END IF;

      END IF;

END IF;

**********************************************************************************************************************

- 중첩 IF 문은 어쨌든 IF...THEN...END IF 형태만 유지하면서 늘려가면 된다.

- 이것을 보기좋게 줄인 것이 IF...ELSIF 이다.

 

 

3. IF... ELSIF 문

**********************************************************************************************************************

IF (조건1)

THEN

     (조건1 이 참일 경우 실행)     

ELSIF (조건2)

THEN

      (조건2 가 참일 경우 실행)

ELSIF (조건3)

THEN

      (조건3 이 참일 경우 실행)

ELSE

      (아무것도 아닐 때 실행)

END IF;

**********************************************************************************************************************

- IF 와 END IF 는 딱 한번만 사용되고, 중간은 모두 ELSIF..THEN으로 계속해서 조건을 추가할 수 있다.

- ELSE IF 가 아닌 ELSIF 이다.

- 조건에 대한 주석을 달면 알아보기 쉽다.  (주석은 '/*...*/' 또는 '--'  사용)

 

 

[예제1] IF...ELSIF 문 사용

**********************************************************************************************************************

DECLARE
        v_Score NUMBER := 85;
        v_Grade CHAR(1);
BEGIN
        IF v_Score >= 90 THEN
                v_Grade := 'A';

        ELSIF v_Score >= 80 THEN
                v_Grade := 'B';

        ELSIF v_Score >= 70 THEN
                v_Grade := 'C';

        ELSIF v_Score >= 60 THEN
                v_Grade := 'D';

        ELSE
                v_Grade := 'E';

        END IF;

        DBMS_OUTPUT.PUT_LINE('Grade is ' || v_Grade);
END;
/
**********************************************************************************************************************

 

 

 

 

4. FOR LOOP 문

**********************************************************************************************************************

FOR 루프인덱스 IN [REVERSE] 최저값..최고값 LOOP

      실행할 문장

END LOOP;

**********************************************************************************************************************

- IN REVERSE 를 사용하면 최고값부터 최저값까지 감소하며 수행된다.

 

 

5. 중첩 FOR LOOP 문

**********************************************************************************************************************

FOR 루프인덱스 IN [REVERSE] 최저값..최고값 LOOP

      FOR 루프인덱스 IN [REVERSE] 최저값..최고값 LOOP

            실행할 문장

      END LOOP;

END LOOP;

**********************************************************************************************************************

 

 

[예제2] FOR LOOP 문 사용

**********************************************************************************************************************

set echo on
BEGIN
        FOR v_outerloopcounter IN 1..2 LOOP
                FOR v_innerloopcounter IN 1..4 LOOP
                        DBMS_OUTPUT.PUT_LINE(
                                'Outer Loop counter is ' || v_outerloopcounter ||
                                ', Inner Loop counter is ' || v_innerloopcounter);
                END LOOP;
        END LOOP;
END;
/
**********************************************************************************************************************

 

 

 

6. WHILE LOOP 문

**********************************************************************************************************************

WHILE (조건) LOOP

       (참일 경우 실행)

END LOOP;

**********************************************************************************************************************

- 조건이 거짓이면 WHILE LOOP 문은 한번도 실행되지 않는다.

 

 

[예제3] WHILE LOOP 예

**********************************************************************************************************************

DECLARE

      v_Cnt NUMBER := 0;

BEGIN

       WHILE v_Cnt <= 10 LOOP

              v_Cnt := v_Cnt + 1;

              DBMS_OUTPUT.PUT_LINE('The Value of v_Cnt is ' || v_Cnt);

        END LOOP;

END;

/

**********************************************************************************************************************

 

 

 

7. EXIT 와 EXIT WHEN

 

- Loop를 빠져나갈 때 사용한다. EXIT를 만나면 Loop를 바로 빠져나간다.

- EXIT WHEN (참 조건) : 조건이 참이면 EXIT를 수행한다. WHEN을 사용하면 IF를 사용하지 않아도 된다.

- LOOP를 중간에 멈추도록 하여 속도를 높이기 위해 사용한다.

 

[예제4] EXIT 사용

**********************************************************************************************************************

DECLARE

      v_Cnt NUMBER := 1;

BEGIN

       WHILE TRUE LOOP                                                   (무한루프)

               DBMS_OUTPUT.PUT_LINE('v_Cnt is ' || v_Cnt);

               IF v_Cnd = 10 THEN

                      EXIT;

               END IF;

               v_Cnt := v_Cnt + 1;

        END LOOP;

END;

/

**********************************************************************************************************************

 

 

[예제5] EXIT WHEN 사용  (IF~END IF 대신 EXIT WHEN 사용)

**********************************************************************************************************************

DECLARE

      v_Cnt NUMBER := 1;

BEGIN

       WHILE TRUE LOOP                                                   (무한루프)

               DBMS_OUTPUT.PUT_LINE('v_Cnt is ' || v_Cnt);

               EXIT WHEN v_Cnd = 10;

               v_Cnt := v_Cnt + 1;

        END LOOP;

END;

/

**********************************************************************************************************************

 

 

 

8, 단순 LOOP

- 그냥 Loop 만 사용할 경우 무한 LOOP 가 된다.

- LOOP와 함께 EXIT WHEN을 사용하면 된다.

 

[예제6] LOOP ~ EXIT THEN 사용

**********************************************************************************************************************

DECLARE

      v_Cnt NUMBER := 1;

BEGIN

       LOOP                                                                   (무한루프)

               DBMS_OUTPUT.PUT_LINE('v_Cnt is ' || v_Cnt);

               EXIT WHEN v_Cnd = 10;

               v_Cnt := v_Cnt + 1;

        END LOOP;

END;

/

**********************************************************************************************************************

 

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)