ORACLE에서 DECODE 함수와 CASE ... THEN 구문의 사용법 및 미묘한 차이점에 대해 알아봅니다.

 

 

 

1. 사용 목적

 

두 기능 모두 사용 목적은 조건문입니다. 두 기능 모두 일반적인 프로그래밍에서의 if/else 기능을 하고 있습니다.

 

 

 

2. DECODE 함수

 

DECODE는 다음과 같이 사용합니다.

 

DECODE( {대상}, {비교 값 1}, {결괏값 1}, {비교 값 2}, {결괏값 2}, ... , {비교 값 N}, {결괏값 N}, {나머지 값} )

 

이렇게만 두고 보면 알기 어려우니 예시를 통해 알아봅시다.

 

다음과 같은 테이블이 있을 때 DECODE 사용 예시와 그에 따른 결괏값 입니다.

 

 

예시 쿼리)

SELECT USER_KEY
	, USER_EMAIL
    , DECODE(USER_KEY, 1, '첫째 유저', 2, '둘째 유저', 3, '셋째 유저', '나머지 유저') USER_DESC 
FROM USERS;

 

결과)

 

 

3. CASE ... THEN 구문

 

CASE ... THEN 구문은 다음과 같이 사용합니다.

 

CASE
    WHEN {조건 1} THEN {결괏값 1}
    WHEN {조건 2} THEN {결괏값 2}
    ...
    WHEN {조건 N} THEN {결괏값 N}
    ELSE {나머지 값}
END

 

이렇게만 두고 보면 알기 어려우니 예시를 통해 알아봅시다.

 

다음과 같은 테이블이 있을 때 CASE 구문의 사용 예시와 그에 따른 결괏값입니다.

 

 

예시 쿼리)

SELECT USER_KEY     
	, USER_EMAIL
    , (CASE
    	WHEN USER_KEY = 1 THEN '첫째 유저'
        WHEN USER_KEY = 2 THEN '둘째 유저'
        WHEN USER_KEY = 3 THEN '셋째 유저'
        ELSE '나머지 유저'
       END) USER_DESC 
FROM USERS;    

 

결과)

 

 

4. 차이점

 

앞서 두 가지를 비교하면서 계속 언급했던 것을 보시면 가장 먼저 차이점이 와 닿을 것입니다. 

 

먼저 DECODE는 "함수"란 것이고 CASE는 "구문"이란것 입니다. 

따라서 DECODE는 SQL에서 사용할 수 없습니다. PL/SQL에서만 사용할 수 있는 함수입니다.

CASE구문은 STATEMENT이므로 SQL에서도 사용 가능합니다.

 

** SQL과 PL/SQL

SQL과 PL/SQL은 다릅니다. 

SQL은 RDBMS에서 데이터에 접근하기 위해 사용하는 "표준언어"입니다.

PL/SQL은 SQL을 사용하여 프로그램을 작성할 수 있게 "확장"해 놓은 오라클의 Procedual Language입니다.

 

 

 

 

 

 

 

+ Recent posts