다른 언어에서 switch case 문과 같은 것이다.
오라클 도움말을 참조하면 설명은 다음과 같다.
CASE 함수
각각의 조건에 맞는 값에 대한 처리를 수행하여 결과와 같게 연산해 리턴하는 것은 DECODE 함수와 동일하나 DECODE 함수에서는 지원하지 않는 범위 비교가 가능하다.
IF~THEN~ELSE문장과 똑같은 결과를 출력할 수 있다.
DECODE 함수는 표현식 또는 컬럼 값이 '=' 비교를 통해 조건과 일치하는 경우에만 다른 값으로 대치할 수 있지만, CASE 함수에서는 산술연산, 관계연산, 논리연산과 같은 다양한 비교가 가능하다. 또한 WHEN 절에서 표현식을 다양하게 정의할 수 있다.
【형식】
CASE 컬럼명|표현식 WHEN 조건1 THEN 결과1
[WHEN 조건2 THEN 결과2
......
WHEN 조건n THEN 결과n
ELSE 결과4]
END
CASE 표현식은 ANSI SQL 형식도 지원한다.? 조건문가 조건문 사이에는 컴마를 사용하지 않는다.
CASE 문은 반드시 END로 끝내야 한다.? 결과를 기술해야 하는 부분은 NULL을 사용해서는 않된다.
CASE 명령어 다음에 기술하는 컬럼명/표현식과 조건, 결과에 표현되는 데이터들은 모두 데이터 타입이 동일해야 한다. 여기에 올 수 있는 데이터 타입으로는 CHAR, VARCHAR2, NCHAR, NVARCHAR2가 있다.
DECODE 함수나 CASE 표현식은 둘 다 IF~THEN~ELSE 로직을 사용하므로 CASE로 작성된 문장을 DECODE 함수를 사용하여 작성할수 도 있다
예제와 설명.
CASE MOD(num,2)
WHEN 0 THEN '짝수'
WHEN 1 THEN '홀수'
ELSE '짝수나 홀수가 아닌건 없습니다..'
END
num을 2로 나눈 나머지가 0일경우 짝수라고 출력하고 1일경우 홀수라고 출력.
CASE뒤에 아무것도 오지 않고 when절에 조건을 넣을수도 있다.
SELECT
CASE
WHEN MOD(num,2)=0 THEN '짝수'
WHEN MOD(num,2)=1 THEN '홀수'
ELSE '짝수나 홀수가 아닌건 없습니다..' END
FROM dual;
위의 예제와 똑같은 결과를 출력합니다.
when에 여러가지 연산이 올수도 있다.오라클 도움말 예제 중.
SQL> select ename,deptno,sal,
2 CASE when sal < 999 then 'D'
3 when sal between 1000 and 2000 then 'C'
4 when sal between 2001 and 3000 then 'B'
5 when sal > 3001 then 'A'
6 end sal_grade
7 from emp
ENAME DEPTNO SAL S
---------- ---------- ---------- -
SMITH 20 800 D
ALLEN 30 1600 C
WARD 30 1250 C
JONES 20 2975 B
MARTIN 30 1250 C
BLAKE 30 2850 B
CLARK 10 2450 B
SCOTT 20 3000 B
KING 10 5000 A
TURNER 30 1500 C
ADAMS 20 1100 C
비슷한것으로는 decode가 있다.
'DataBase > Sql' 카테고리의 다른 글
[Sql] Oracle - Self Training 오라클 정리 (0) | 2011.07.12 |
---|---|
[Sql] NVL(컬럼명, 0) 대신에 getDouble("컬럼명") 을 사용하자. (0) | 2011.06.21 |
[Sql] Oracle - REPLACE, TRANSLATE 함수 (1) | 2011.02.23 |
[Sql] Oracle - 주민번호로 현재 나이 구하기 (1) | 2011.02.23 |
[Sql] Oracle - TRANSLATE 활용 (0) | 2011.02.23 |