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입니다.
반응형
'Programming > Databse' 카테고리의 다른 글
[PostgreSQL] Postgresql 외부 접속 허용 (0) | 2020.03.29 |
---|---|
[PostgreSQL] Ubuntu에 Postgresql 설치하기 (0) | 2020.03.29 |
[Maria10] 신규 유저 생성 및 권한 부여 (0) | 2019.04.23 |
[Oracle] 사전에 정의되어있는 Exception 케이스. (0) | 2018.12.18 |
[Oracle] 여러 데이터를 하나로 이어붙이기 (0) | 2018.12.05 |