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;

/

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

 

[ 출처 ] http://blog.naver.com/tangamjaelt?Redirect=Log&logNo=36966369

'DataBase > PLSql' 카테고리의 다른 글

[PL/Sql] PL/Sql 프로시저?  (0) 2012.08.13
[PL/Sql] PL/Sql 변환함수  (0) 2012.08.13
[PL/Sql] PL/Sql 패키지 사용 예  (0) 2012.08.13
[PL/Sql] PL/Sql 함수  (0) 2012.08.13
[PL/Sql] PL/Sql 연산자  (0) 2012.08.13

+ Recent posts