이번 시간에는 오라클 decode 사용방법을 소개하겠습니다.
1. decode란?
오라클에서 사용하는 조건문으로 Decode를 사용하여 조건에 따라 다른 결과값을 표기할 수 있다.
- 표현식 -> decode(대상값, 조건1, 결과1, 조건2, 결과2 ….)
JAVA에서의 IF문을 중첩으로 사용하는 것 처럼 decode도 중첩으로 사용할 수 있다.
오라클에서 조건문 같은 함수로 조건절에 부합하는 항목에 대해서 결과값을 정해서 뽑을 수 있는 장점을 가지고 있습니다. 어찌보면 IF문과 비슷해 보이지만 실상 SWITCH CASE문 하고 많이 닮았습니다.
2. 예제
2.1) 직급에 조건을 주어 한글 명칭으로 변경하기
SELECT EMPNO , ENAME, SAL, JOB, DECODE(JOB, 'CLERK', '직원', 'SALESMAN', '영업','????') AS 담당 FROM EMP
다음은 EMP 테이블에서 직원 번호, 이름 등을 추출하고 JOB 항목에 대해서 DECODE를 걸었습니다.
JOB의 값이 CLERK면 직원으로 SALESMAN이면 영업으로 표시하고 나머지 항목은 ?로 처리하라는 SQL문입니다.
2.2) 결과
2.3) 직급에 명칭에 따라 연봉을 함수로 나타내기
SELECT JOB, DECODE(JOB, 'PRESIDENT', TO_CHAR(MAX(SAL)), 'MANAGER', TO_CHAR(MIN(SAL)), '비밀') AS 담당 FROM EMP GROUP BY JOB;
다음은 직급을 GROUP BY 로 묶고 직급이 PRESIDENT에 대한 연봉의 최대값을 MANAGER 일 경우에는 그 직급에 대한 최소 연봉을 표기하고 나머지는 비밀로 표기합니다.
2.4) 결과
GROUP BY 로 컬럼을 묶고 DECODE를 사용할때 주의점은 조건 대상과 결과값은 타입은 항상 같아야 합니다.
위의 오라클 decode 예제에서는 결과를 MAX(SAL)로 표기하면 NUMBER 타입이 되기 때문에 VARCHAR2인 JOB는 맞지 않아 에러가 나게 됩니다.
그래서 TO_CHAR를 써서 MAX에 대한 결과를 문자 형태로 바꿔주어서 결과를 받을 수 있었습니다.
뿌잉뿌잉
오왕! 본문 예제2.1처럼 메뉴가 나오는것은 어떻게 하는것잉가용!!
관리자
메뉴요?? 어떤걸 말씀하시는건지;;;