1. 조건문 (IF 문)
유형 1. IF ~ END IF 문장
조건이 여러 개 일 경우에 사용하는 가장 기본적인 IF 문장
문법 :
IF (조건) THEN
실행문장 ;
END IF ;
예 : EMP 테이블에서 EMPNO, ENAME, DEPTNO, DNAME 을 출력
단 DNAME 의 값은 아래와 같다
DEPTNO 가 10 이면 'ACCOUNT' ,
DEPTNO 가 20 이면 'RESEARCH' ,
DEPTNO 가 30 이면 'SALES' ,
DEPTNO 가 40 이면 'OPERATIONS' 로 출력
SCOTT>DECLARE
vempno emp.empno%TYPE ;
vname emp.ename%TYPE ;
vdeptno emp.deptno%TYPE ;
vdname VARCHAR2(20) := null ;
BEGIN
SELECT empno, ename, deptno
INTO vempno, vename, vdeptno
FROM emp
WHERE empno=7900 ;
IF (vdeptno = 10) THEN --IF 문 시작
vdname :='ACCOUNT' ;
END IF ; --IF 문 끝
IF (vdeptno = 10) THEN
vdname :='RESEARCH' ;
END IF ;
IF (vdeptno = 10) THEN
vdname :='SALES' ;
END IF ;
IF (vdeptno = 10) THEN
vdname :='OPERATIONS' ;
END IF ;
DBMS_OUTPUT.PUT_LINE (vempno||' '||vename||' '||vdeptno||' 'vdname) ;
END ;
/
위처럼 조건이 여러 개 일 경우 매번 조건을 새로 시작해야 하기에 사용함에 있어 불편함이 많다.
그래서 조건이 2개 이상일 경우 다음의 유형 2의 방법을 더 많이 사용
유형 2.IF ~THEN ~ELSIF ~END IF 문장
문법 :
IF (조건) THEN
실행문장 ;
ELSIF (조건) THEN
실행문장 ;
ELSIF (조건) THEN
실행문장 ;
END IF ;
예 : MP 테이블에서 EMPNO, ENAME, DEPTNO, DNAME 을 출력
단 DNAME 의 값은 아래와 같다
DEPTNO 가 10 이면 'ACCOUNT' ,
DEPTNO 가 20 이면 'RESEARCH' ,
DEPTNO 가 30 이면 'SALES' ,
DEPTNO 가 40 이면 'OPERATIONS' 로 출력
SCOTT>DECLARE
vempno emp.empno%TYPE ;
vname emp.ename%TYPE ;
vdeptno emp.deptno%TYPE ;
vdname VARCHAR2(20) := null ;
BEGIN
SELECT empno, ename, deptno
INTO vempno, vename, vdeptno
FROM emp
WHERE empno=7900 ;
IF (vdeptno = 10) THEN
vdname :='ACCOUNT' ;
ELSIF (vdeptno = 20) THEN
vdname :='RESEARCH' ;
ELSIF (vdeptno = 30) THEN
vdname :='SALES' ;
ELSIF (vdeptno = 40) THEN
vdname :='OPERATIONS' ;
2. CASE 문
IF 문장과 같이 비교 조건이 여러 가지 일 경우 훨씬 더 간결하고 간단하게 조건을 파악해서 분기시킬 수 있는 제어문
문법 :
CASE [조건]
WHEN 조건 1 THEN 결과 1
WHEN 조건 2 THEN 결과 2
...
WHEN 조건 n THEN 결과 n
[ELSE 기본값]
END ;
CASE 내부의 여러 조건들을 구분할 때 ,(콤마) 를 사용하지 않음
사용 예 1 : 사용자로부터 사원 번호를 입력 받은 후 EMP 테이블에서 EMPNO, ENAME, DEPTNO, DNAME 을 출력하되
DEPTNO 가 10 이면 'ACCOUNT' ,
DEPTNO 가 20 이면 'RESEARCH' ,
DEPTNO 가 30 이면 'SALES' ,
DEPTNO 가 40 이면 'OPERATIONS' 로 출력
SCOTT>DECLARE
2 v_empno emp.empno%TYPE ;
3 v_ename emp.ename%TYPE ;
4 v_deptno emp.deptno%TYPE ;
5 v_dname varchar2(10) ;
6 BEGIN
7 SELECT empno, ename, deptno
8 INTO v_empno, v_ename, v_deptno
9 FROM emp
10 WHERE empno = &empno ;
11 v_dname := CASE v_deptno
12 WHEN 10 THEN 'ACCOUNT'
13 WHEN 20 THEN 'RESEARCH'
14 WHEN 30 THEN 'SALES'
15 WHEN 40 THEN 'OPERATIONS'
16 END ;
17 DBMS_OUTPUT.PUT_LINE (v_empno||' '||v_deptno||' 'v_dname) ;
18 END ;
19 /
Enter value for empno : 7900
7900 JAMES 30 SALES
위 예에서 11~ 16줄의 CASE 부분을 아래와 같이 변형해도 결과는 동이랗게 나옴
11 v_dname := CASE
12 WHEN v_deptno = 10 THEN 'ACCOUNT'
13 WHEN v_deptno = 20 THEN 'RESEARCH'
14 WHEN v_deptno = 30 THEN 'SALES'
15 WHEN v_deptno = 40 THEN 'OPERATIONS'
16 END ;
3. 반복문
'오라클 > PL/SQL' 카테고리의 다른 글
PL/SQL sub program (0) | 2014.10.16 |
---|---|
PL/SQL 예외처리 (0) | 2014.10.16 |
PL/SQL CURSOR (0) | 2014.10.14 |
PL/SQL 변수 (0) | 2014.10.13 |
PL/SQL 시작하기 (0) | 2014.10.13 |