DECODE 함수
--------------------------------------------------------------------------------
DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL 안으로 끌어들여 사용하기 위하여 만들어진 오라클 함수이다.
따라서 일반 프로그래밍 언어의 IF문이 수행 할 수 있는 기능을 포함하고 있다. select시의 decode 사용은 from 절만 빼고 어디에서나 사용할 수 있다.
일반 프로그래밍과 decode 함수를 서로 비교하여 보자.
• IF~THEN~ELSE문장과 똑같은 결과를 출력할 수 있다.
• 각각의 조건에 맞는 값에 대한 처리를 결과와 같게 연산해 리턴한다.
• 비교 연산은 '='만 가능하다.
• CASE 함수는 DECODE 함수의 확장기능이다.
[A]
IF문 Decode 함수 IF A=B THEN
RETURN 'T';
END IF;
DECODE(A,B,'T') IF A=B THEN
RETURN 'T';
[B]
ELSIF A=C THEN
RETURN 'F';
ELSE
RETURN 'X';
END IF;
DECODE(A,B,'T',C,'F','X')
【형식】
DECODE(expr, search1,result1
[,search2,result2,...] [,default] );
【예제】
SQL> select ename,sal,comm,
2 DECODE(deptno,10,sal*1.1,
3 20,sal*1.2,
4 sal*1.3) 인상
5 from emp;
ENAME SAL COMM 인상
---------- ---------- ---------- ----------
SMITH 800 960
JONES 2975 3570
CLARK 2450 2695
SCOTT 3000 3600
KING 5000 5500
ADAMS 1100 1320
FORD 3000 3600
MILLER 1300 1430
ALLEN 1600 300 2080
WARD 1250 500 1625
MARTIN 1250 1400 1625
ENAME SAL COMM 인상
---------- ---------- ---------- ----------
TURNER 1500 0 1950
12 개의 행이 선택되었습니다.
SQL>
SQL> select ename,sal,
2 decode(sign(sal-3500),-1,'poor','good')
3 from emp;
ENAME SAL DECO
---------- ---------- ----
SMITH 800 poor
JONES 2975 poor
CLARK 2450 poor
SCOTT 3000 poor
KING 5000 good
ADAMS 1100 poor
FORD 3000 poor
MILLER 1300 poor
ALLEN 1600 poor
WARD 1250 poor
MARTIN 1250 poor
ENAME SAL DECO
---------- ---------- ----
TURNER 1500 poor
12 개의 행이 선택되었습니다.
SQL>
SQL> select job,sal,
2 decode(job, 'ANALYST', sal*1.10,
3 'CLERK' , sal*1.15,
4 'MANAGER', sal*1.20, sal) salary
5 from emp;
JOB SAL SALARY
--------- ---------- ----------
CLERK 800 920
SALESMAN 1600 1600
SALESMAN 1250 1250
MANAGER 2975 3570
SALESMAN 1250 1250
MANAGER 2850 3420
MANAGER 2450 2940
ANALYST 3000 3300
PRESIDENT 5000 5000
SALESMAN 1500 1500
CLERK 1100 1265
JOB SAL SALARY
--------- ---------- ----------
CLERK 950 1092.5
ANALYST 3000 3300
CLERK 1300 1495
14 개의 행이 선택되었습니다.
SQL>
SQL> select count(decode(to_char(hiredate,'MM'), '01',1)) "Jan",
2 count(decode(to_char(hiredate,'MM'), '02',1)) "Feb",
3 count(decode(to_char(hiredate,'MM'), '03',1)) "Mar",
4 count(decode(to_char(hiredate,'MM'), '04',1)) "Apr",
5 count(decode(to_char(hiredate,'MM'), '05',1)) "May",
6 count(decode(to_char(hiredate,'MM'), '06',1)) "Jun",
7 count(*) "Total"
8 from emp
9 where to_char(hiredate,'MM') >= '01' and
10 to_char(hiredate,'MM') <= '06';
Jan Feb Mar Apr May Jun Total
---------- ---------- ---------- ---------- ---------- ---------- ----------
1 2 0 2 2 1 8
SQL>
--------------------------------------------------------------------------------
SQL> select product_id,
2 DECODE (warehouse_id, 1, 'Southlake',
3 2, 'San Francisco',
4 3, 'New Jersey',
5 4, 'Seattle',
6 'Non domastic') "Location"
7 from invertories
8 where product_id < 1775 9 order by product_id, "Location";
'IT > DB' 카테고리의 다른 글
[Oracle] 검색 조건 '%' (0) | 2015.07.27 |
---|---|
[Oracle SQL] 테이블 정의서 query (0) | 2015.07.27 |
[Oracle] Oracle 10g Character set 변경 (0) | 2015.07.27 |
[Oracle] PL/SQL 문법정리 (0) | 2015.07.27 |
[Oracle] Oralce 10g Windows7에 설치 (0) | 2015.07.27 |