Oracle case문 먹고살기/Oracle 2011. 8. 10. 10:28

참조: where구에 case문을 써 보자

지금까지는 oracle 독자 함수인 decode를 많이 사용했는데

이제는 표준 sql문에 case문이 있으니

나도 서서히 case문을 사용하는 편으로 바꿔야겠다.

아래의 두 가지 사용방법이 있다.

if-else 와 같은 사용법

SELECT

CASE
WHEN ROUND_METHOD <= 0 THEN FLOOR(c_data.BASE_AMOUNT * RATE)
WHEN ROUND_METHOD >= 2 THEN CEIL(c_data.BASE_AMOUNT * RATE)
WHEN ROUND_METHOD > 0 THEN ROUND(c_data.BASE_AMOUNT * RATE, ROUND_DIGIT)
END
INTO l_UNEMPLOYMENT_INSURANCE
FROM ACCOUNT_M_002
WHERE PERIOD_VALIDITY_FROM <= SYSDATE
AND PERIOD_VALIDITY_TO >= SYSDATE
;

switch 와 같은 사용법

SELECT

CASE ROUND_METHOD
WHEN 0 THEN FLOOR(c_data.BASE_AMOUNT * RATE)
WHEN 1 THEN CEIL(c_data.BASE_AMOUNT * RATE)
WHEN 2 THEN ROUND(c_data.BASE_AMOUNT * RATE, ROUND_DIGIT)
END
INTO l_UNEMPLOYMENT_INSURANCE
FROM ACCOUNT_M_002
WHERE PERIOD_VALIDITY_FROM <= SYSDATE
AND PERIOD_VALIDITY_TO >= SYSDATE
;

▶ 메모

1. else는 생략 가능하지만, 생략되었다면 NULL을 리턴한다.

2. microsoft ACCESS에서는 지원하지 않는다.

3. switch 와 같은 사용법은 if-else 와 같은 사용법의 생략 스타일이라고 볼수 있다.

그러므로 아마도 if-else 와 같은 사용법만 알아두면 될 것 같다.

4. when 조건평가에 있어서, 참이 되는 when이 발견되면 그 밑에 더 정확한 when이 있다고 하더라도

더 이상 처리를 하지 않기에 이 점을 의식하여 case문이 작성할 필요가 있다.

5. performance에 관한 얘기

http://blog.naver.com/json2811/90080666948

[출처] Oracle case문|작성자 제이슨

'먹고살기 > Oracle' 카테고리의 다른 글

GROUP BY의 고급 응용  (0) 2011.08.10
DECODE와 CASE WHEN ...  (0) 2011.08.10
oracle case when ~ then~ else end  (0) 2011.08.10
Oracle Sql Case 사용법  (0) 2011.08.10
[오라클] SQL - UNION에 관한 SQL 규칙  (0) 2011.07.19