새소식

300x250
3. Database/Oracle 기본

[Oracle] PL/SQL 기초2 - 반복문, 제어문

  • -
728x90

[Oracle] PL/SQL 기초2 - 반복문 (FOR LOOP, LOOP, WHILE LOOP) 및 제어문 (IF, CASE)


안녕하세요. 갓대희 입니다. 이번 포스팅은 [ PL / SQL 반복문, 제어문 ] 입니다. : ) 






1. 반복문


PL / SQL 에서도 반복문을 사용할 수 있는데, 크게는 2가지로 볼 수 있다. (LOOP, FOR)


▶ 1.1 FOR LOOP


[문법]


  1. FOR index in [REVERSE] 시작값 .. END값 LOOP
  2.     STATEMENT 1
  3.     STATEMENT 2
  4.     ...
  5. END LOOP;



- index는 자동 선언되는 binary_integer형 변수이고, 1씩 증가 한다.

- REVERSE 옵션이 사용 될 경우 index 는 upper_bound에서 lower_bound로 1씩 감소 한다.

- IN 다음에는 coursor나 select 문이 올 수 있다.




EX 1) 


SET serveroutput ON;

BEGIN

FOR i in 1..4 LOOP

  if mod(i, 2) = 0 then 

dbms_output.put_line( i || '는 짝수!!');

else

dbms_output.put_line( i || '는 홀수!!');

end if;

END LOOP;

END;





EX 2) 간단한 FOR 문안에 SELECT 문이 오는 예제

       (이부분은 사실 cursor 예제인데 뒤에서 더 자세히 설명)


SET serveroutput ON;

BEGIN

FOR NUM_LIST IN 

    (

        SELECT 1 AS NUM FROM DUAL

        UNION ALL

        SELECT 2 AS NUM FROM DUAL

        UNION ALL

        SELECT 3 AS NUM FROM DUAL

        UNION ALL

        SELECT 4 AS NUM FROM DUAL

    )

    LOOP

  if mod(NUM_LIST.NUM, 2) = 0 then 

dbms_output.put_line( NUM_LIST.NUM || '는 짝수!!');

else

dbms_output.put_line( NUM_LIST.NUM || '는 홀수!!');

end if;

END LOOP;

END;



 - 중간에 다음과 같은 SELECT 문을 그냥 단순 조회하면 다음과 같은 테이블의 결과가 나온다.


 - 전체 PL/SQL에 대한 결과!



▶ 1.2 LOOP문


[문법]


  1. LOOP 
  2.     PL/SQL STATEMENT 1
  3.        다른 LOOP를 포함하여 중첩으로 사용 가능
  4.     EXIT [WHEN CONDITION]
  5. END LOOP;



EXIT 문이 사용되었을 경우, 무조건 LOOP문을 빠져나간다.

- EXIT WHEN 조건이 사용될 경우 WHEN절에서 LOOP를 빠져나가는 조건을 제어할 수 있다.



EX 1) 기본 LOOP문 예제


SET serveroutput ON;

DECLARE

    v_num NUMBER := 6; -- 시작숫자

    v_tot_num NUMBER := 0; -- 총 loop수 반환 변수

BEGIN

    LOOP

        DBMS_OUTPUT.PUT_LINE('현재 숫자 : ' || v_num);

        v_num := v_num + 1;

        v_tot_num := v_tot_num + 1;

        EXIT WHEN v_num > 10;

    END LOOP;

    

    DBMS_OUTPUT.PUT_LINE(v_tot_num || '번의 LOOP');

END;




EX 2) WHILE LOOP문 예제


SET serveroutput ON;

DECLARE

    v_num NUMBER := 6; -- 시작숫자

    v_tot_num NUMBER := 0; -- 총 loop수 반환 변수

BEGIN

    WHILE v_num < 11 LOOP

        DBMS_OUTPUT.PUT_LINE('현재 숫자 : ' || v_num);

        v_num := v_num + 1;

        v_tot_num := v_tot_num + 1;

        -- EXIT WHEN v_num > 10;

    END LOOP;

    DBMS_OUTPUT.PUT_LINE(v_tot_num || '번의 LOOP');

END;





2. 제어문


알반적인 프로그래밍에서 사용되는 IF문, CASE문 등의 제어문(조건절)을 PL/SQL에서도 사용할 수 있다.


▶ 2.1 IF


[문법]


  1. IF 조건1 THEN
  2.     처리문1
  3. ELSE IF 조건2 THEN
  4.     처리문2
  5.     ...
  6. ELSE
  7.     처리문
  8. END IF;



- IF문은 조건값이 참이면 해당 조건의 처리문장이 실행된다.

- 다른 프로그래밍 IF 문과 다른점

1. 조건 다음에 THEN을 붙인다.

2. 보통 ELSE IF(ELSE와 IF 사이 공백 존재)를 쓰지만, PL/SQL에서는 ELSIF(공백 없음) 명령어를 사용한다.

3. 마지막에는 IF를 끝낸다는 END IF를 붙인다.



EX 1) 기본 IF문 예제


DECLARE

    v_score NUMBER := 79;

BEGIN

  IF v_score >= 90 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : A');

  ELSIF v_score >= 80 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : B');

  ELSIF v_score >= 70 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : C');

  ELSIF v_score >= 60 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : D');

  ELSE

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : F');

  END IF;

END;



EX 2) IF문 예제2 - 조건이 NULL인경우 

 - NULL의 비교는 항상 NULL이기 때문에, ELSE 이하 문만 수행된다.


DECLARE

    v_score NUMBER;

BEGIN

  IF v_score >= 90 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : A');

  ELSIF v_score >= 80 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : B');

  ELSIF v_score >= 70 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : C');

  ELSIF v_score >= 60 THEN

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : D');

  ELSE

    DBMS_OUTPUT.PUT_LINE('점수 : ' || v_score || ', 등급 : F');

  END IF;

END;




▶ 2.2 CASE


[문법]


  1. CASE WHEN 조건1 THEN
  2.     처리문1
  3. WHEN 조건2 THEN
  4.     처리문2
  5.     ...
  6. ELSE
  7.     처리문
  8. END CASE;



- 오라클 CASE문과 PL/SQL CASE문은 거의 비슷하다.

CASE 표현식조건문을 알아보도록 하자.


EX 1) CASE 표현식 예제

 - 단순하게 조건문에 따른 값을 대입할 때 사용한다.


DECLARE

    v_grade     CHAR(1) := 'C';

    v_appraisal VARCHAR2(20) ;

BEGIN

  v_appraisal := CASE v_grade

  WHEN 'A' THEN 'Excellent'

  WHEN 'B' THEN 'Very Good'

WHEN 'C' THEN 'Good'

ELSE 'No such grade'

  END;

  DBMS_OUTPUT.PUT_LINE ('Grade : '|| v_grade) ;

  DBMS_OUTPUT.PUT_LINE ('Appraisal: '|| v_appraisal);

END;





EX 2) CASE 조건문 예제

 - 단순한 값이 아닌 PL/SQL문 (명령문)을 실행 시키고자 하는 경우에 CASE 조건문을 사용해야 한다. 

 - CASE 조건문은 끝이 END CASE로 끝난다.


DECLARE

    v_grade     CHAR(1) := 'C';

    v_appraisal VARCHAR2(20) ;

BEGIN

  CASE v_grade

  WHEN 'A' THEN

  v_appraisal := 'Excellent';

  WHEN 'B' THEN

    v_appraisal := 'Very Good';

  WHEN 'C' THEN

    v_appraisal := 'Good';

  ELSE

    v_appraisal := 'No such grade';

  END CASE;

  DBMS_OUTPUT.PUT_LINE ('Grade : '|| v_grade) ;

  DBMS_OUTPUT.PUT_LINE ('Appraisal: '|| v_appraisal);

END;






혹시 기본 pl/sql 문법이 궁금하다면 다음글 참고


2018/05/24 - [Database/Oracle 기본] - [Oracle] PL/SQL 기초 (정의, 특징, 사용방법, 변수선언 방법)



2018/06/14 - [4. Database/4_3 Oracle 기본] - [Oracle] PL/SQL 기초3 - 커서





300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.