영보의 SystemOut.log

[Oracle] PL/SQL - 제어문 (반복문 / 선택문 / 조건문) 종류와 예제 본문

Database/Oracle

[Oracle] PL/SQL - 제어문 (반복문 / 선택문 / 조건문) 종류와 예제

영보로그 2020. 11. 10. 14:58
반응형

 개념 정리

 

# 제어문

 - 반복문

 - 선택문

 - 조건문

 

 

# 조건문


종류

형식
단일 조건문 
  IF(조건문) THEN  

            처리 
          END IF; 

  => 비교연산자 (=, !=(<>), <, >, <=, =>),
       논리연산자 (NOT,OR,AND) 
 

선택 조건문  
  IF(조건문) THEN 

            처리 (조건문이 TRUE) 
          ELSE 
            처리 
          END IF;   

다중 조건문 
  IF(조건문) THEN 

            처리 
          ELSIF(조건문) THEN 
            처리 
          ELSIF(조건문) THEN 
            처리 
          ELSE 
            처리 
          END IF;   

선택 
  CASE[조건] 

            WHEN 조건 THEN 결과 
            WHEN 조건 THEN 결과 
            WHEN 조건 THEN 결과 
          ELSE 
            처리 
          END;   



    

# 반복문

종류
형식

while 
  WHILE 조건 LOOP 

            처리 
          END  LOOP ; 

for 
  FOR i IN 1..9 LOOP        // 1->9까지 

            처리 
          END LOOP; 
          FOR i IN REVERSE 1..9 LOOP   // 9->1까지 

basic (loop) 
  LOOP 

            문장 
            문장 
          END LOOP  

 

 

 
 

 

 예제

 

# 단일 조건문 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--단일 조건문
DECLARE
    --선언부(변수선언)
    vename emp.ename%TYPE;
    vjob emp.job%TYPE;
    vdname dept.dname%TYPE;
    vdeptno emp.deptno%TYPE;
BEGIN
    --구현부
    --변수에 값 대입 => :=
    SELECT deptno,ename,job INTO vdeptno,vename,vjob
    FROM emp
    WHERE ename='KING';
    
    IF(vdeptno=10) THEN
        vdname:='개발부';
    END IF;
    
    IF(vdeptno=20) THEN
        vdname:='영업부';
    END IF;
    
    IF(vdeptno=30) THEN
        vdname:='총무부';
    END IF;
    --결과값 출력
    DBMS_OUTPUT.PUT_LINE('======결과값========');
    DBMS_OUTPUT.PUT_LINE('이름:'||vename);
    DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
    
    --예외처리
END;
/
cs

 

 

# 다중 IF문 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
--다중 IF 문
DECLARE
    --선언부(변수선언)
    vename emp.ename%TYPE;
    vjob emp.job%TYPE;
    vdname dept.dname%TYPE;
    vdeptno emp.deptno%TYPE;
BEGIN
    --구현부
    --변수에 값 대입 => :=
    SELECT deptno,ename,job INTO vdeptno,vename,vjob
    FROM emp
    WHERE ename='KING';
    
    IF(vdeptno=10) THEN
        vdname:='개발부';
    
    ELSIF(vdeptno=20) THEN
        vdname:='영업부';
    
    ELSIF(vdeptno=30) THEN
        vdname:='총무부';
    END IF;
    
    --결과값 출력
    DBMS_OUTPUT.PUT_LINE('======결과값========');
    DBMS_OUTPUT.PUT_LINE('이름:'||vename);
    DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
    
    --예외처리
END;
/
cs

 

 

 

# 선택 조건문 예제 (1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- 선택 조건문 IF~ELSE
-- 성과급이 없습니다.
DECLARE
    vename emp.ename%TYPE;
    vcomm emp.comm%TYPE;
    vsal emp.sal%TYPE;
BEGIN    
    SELECT ename,comm,sal INTO vename,vcomm,vsal
    FROM emp
    WHERE ename='SMITH';
    -- 연산처리 => NULL값일 경우에는 결과 값이 NULL
    IF(vcomm>0) THEN 
     DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은'||vcomm||' 입니다.');
    ELSE
     DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은 없습니다.');
    END IF
END;
/
cs

 

 

# 선택 조건문 예제 (2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 선택 조건문 IF~ELSE
-- 성과급이 ㅇㅇ입니다
DECLARE
    vename emp.ename%TYPE;
    vcomm emp.comm%TYPE;
    vsal emp.sal%TYPE;
BEGIN    
    SELECT ename,comm,sal INTO vename,vcomm,vsal
    FROM emp
    WHERE ename='MARTIN';
    -- 연산처리 => NULL값일 경우에는 결과 값이 NULL
    IF(vcomm>0) THEN 
     DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은'||vcomm||' 입니다.');
    ELSE
     DBMS_OUTPUT.PUT_LINE(vename||'님의 성과급은 없습니다.');
    END IF
END;
/
 
cs

 

 

 

# CASE문 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- CASE = TRIGGER
-- 반복문
DECLARE
  vempno emp.empno%TYPE;
  vename emp.ename%TYPE;
  vdeptno emp.deptno%TYPE;
  vdname dept.dname%TYPE;
BEGIN
  SELECT empno, ename, deptno INTO vempno,vename,vdeptno
  FROM emp
  WHERE ename='SMITH';
  
  vdname:=CASE vdeptno
          WHEN 10 THEN '개발부'
          WHEN 20 THEN '총무부'
          WHEN 30 THEN '자재부'
          WHEN 40 THEN '신입'
          END;
  DBMS_OUTPUT.PUT_LINE('====결과====');    
  DBMS_OUTPUT.PUT_LINE('이름:'||vename);
  DBMS_OUTPUT.PUT_LINE('사번:'||vempno);
  DBMS_OUTPUT.PUT_LINE('부서:'||vdname);
END;
/
cs

 

 

# FOR 문 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 1부터 10까지 출력하는 FOR문
 BEGIN
    FOR i IN 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE(i);
    END LOOP;
 END;
 /
 
--10부터 1까지 출력하는 FOR문
 BEGIN
    FOR i IN REVERSE 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE(i);
    END LOOP;
 END;
 /
cs
반응형