본문 바로가기

DB/Oracle

DECODE 함수

출처: http://radiocom.kunsan.ac.kr/lecture/oracle/function/DECODE.html

DECODE 함수 


DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL 안으로 끌어들여 사용하기 위하여 만들어진 오라클 함수이다.
따라서 일반 프로그래밍 언어의 IF문이 수행 할 수 있는 기능을 포함하고 있다. select시의 decode 사용은 from 절만 빼고 어디에서나 사용할 수 있다.
일반 프로그래밍과 decode 함수를 서로 비교하여 보자.
<dd>• IF~THEN~ELSE문장과 똑같은 결과를 출력할 수 있다.
</dd><dd>• 각각의 조건에 맞는 값에 대한 처리를 결과와 같게 연산해 리턴한다.
</dd><dd>• 비교 연산은 '='만 가능하다.
</dd>

• CASE 함수는 DECODE 함수의 확장기능이다.

 

IF문Decode 함수
IF A=B THEN 
  RETURN 'T';
END IF;
DECODE(A,B,'T')
IF A=B THEN
  RETURN 'T';
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> <hr color="#ff0000" /> 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";


'DB > Oracle' 카테고리의 다른 글

oracle index 범위 스캔 불가능 한 경우  (0) 2016.02.04
오라클 문자함수 LPAD, RPAD  (0) 2016.02.04
ora-12560: INS:프로토콜 어댑터 오류  (0) 2016.02.04
Index Rebuild  (0) 2016.02.04
오라클 alert_SID.log 파일 위치 찾기  (0) 2016.02.04