■ Data Skill ■/PL-SQL

PL/SQL (7) - 조건문, 반복문 사용

한길(One Way) 2023. 3. 17.

1. IF 문

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

IF (조건)

THEN

(조건이 참일 경우 수행)

ELSE

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

END IF;

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

DECLARE

i NUMBER := 0;

BEGIN

IF i = 0 THEN

DBMS_OUTPUT.PUT_LINE('i = 0');

ELSE

NULL;

END IF;

END;

/

 

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;

/

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

728x90

'■ Data Skill ■ > PL-SQL' 카테고리의 다른 글

PL/SQL (9) - 변환 함수 사용  (0) 2023.03.17
PL/SQL (8) - 오라클 내장 함수  (0) 2023.03.17
PL/SQL (6) - 패키지 사용의 예  (0) 2023.03.17
PL/SQL (5) - 함수 (Function)  (0) 2023.03.17
PL/SQL (4) - 연산자  (0) 2023.03.17

댓글