728x90
오라클은 조건 처리를 구현하기 위해 DECODE 함수와 CASE 표현식을 제공한다.
DECOD는 오라클 전공 함수이며, CASE 표현식은 ANSI SQL이다.
DECODE 함수
프로그래밍 언어에서 사용되는 if-then-else 구문과 비슷한 기능을 한다.
구문은 다음과 같다.
DECODE(col|표현식, search1, result1,
search2, result2,...,
default);
첫 번째 인수에 해당되는 표현식을 serach 값과 비교한 후 동일하다면 result 값을 반환한다. 마지막 default는 모든 조건에 맞지 않는 데이터에 적용할 기본값을 주기 위해 사용한다.
다음 보기를 보면 이해하기 쉬울 것이다.
select emp_name, position, salary,
DECODE(position, '사원', 1.05 * salary,
'대리', 1.07 * salary,
salary) as INCREASED_SALARY
from y_emp;
INCREASED_SALARY 열은 사원이면 급여에 1.05를 곱하여 표현하고, 대리이면 1.07을 곱하여 표현하고 그 외에는 급여만 표시한다.
다음과 같이 DECODE 함수를 이용해 급여등급을 반환할 수 있다.
select emp_name || position, salary ,DECODE(trunc(salary/300), 0, 'C'
, 1, 'B'
, 2, 'A'
,'A') "급여등급"
from y_emp;
CASE
case표현식은 decode함수에 비해 좀 더 if-then-else 논리에 가깝다고 볼 수 있다.
구문은 다음과 같다.
CASE 표현식 WHEN 비교 표현식1 THEN 결과1
WHEN 비교 표현식2 THEN 결과2.....
WHEN 비교 표현식n THEN 결과n
ELSE else_expr end
1) case로 시작해 end로 끝나야 한다
2) 만족하는 when - then 쌍이 없고 else 절이 존재하는 경우 사용자 지정값 (else_expr)반환한다.
3) case내부 아무런 절에도 없으면 NULL을 반환한다.
사원이면 5%인상, 대리면 7%, 과장이면 10% 인상된 급여를 반환한다. 그 외 직급에 대해서는 인상되지 않은 급여 지급
select emp_name, position, salary,
case position when '사원' then 1.05 * salary
when '대리' then 1.07 * salary
when '과장' then 1.10 * salary
else salary end AS INCREASED_SALARY
from y_emp;
728x90
'SQL > oracle' 카테고리의 다른 글
oracle SQL - DML 매우매우매우 기초 (insert, update, delete) (0) | 2022.12.08 |
---|---|
oracle SQL - Join (ON).1 (0) | 2022.12.08 |
oracle SQL - 일반함수 (NVL, NVL2, NULLIF, COALESCE) (0) | 2022.12.07 |
oracle SQL - 데이터 유형의 변환 (TO_CHAR) (0) | 2022.12.07 |
oracle SQL - 날짜 형식 수정, 날짜연산 (0) | 2022.12.07 |