[본문스크랩] PL/SQL (7) - 조건문 사용
###################################################################################################
# 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;
/
**********************************************************************************************************************
'오라클' 카테고리의 다른 글
[본문스크랩] PL/SQL (9) - 변환 함수 사용 (0) | 2007.12.21 |
---|---|
[본문스크랩] PL/SQL (8) - 오라클 내장 함수 (0) | 2007.12.21 |
[본문스크랩] PL/SQL (6) - 패키지 사용의 예 (0) | 2007.12.21 |
[본문스크랩] PL/SQL (5) - 함수 (0) | 2007.12.21 |
[본문스크랩] PL/SQL (4) - 연산자 (0) | 2007.12.21 |