본문 바로가기
Database

[Oracle] 오라클 DECODE() 함수로 IF-ELSE 로직을 SQL에서 구현하는 방법

by 코드개미 2025. 6. 7.

오라클 DECODE() 함수로 IF-ELSE 로직을 SQL에서 구현하는 방법
[Oracle] DECODE

1. DECODE 함수란?

DECODE 함수는 Oracle에서 조건에 따라 다른 값을 반환하는 조건 분기 함수입니다. IF-ELSE 또는 CASE 문과 유사하게 작동하지만, 간결한 문법 덕분에 간단한 분기 처리에 매우 유용합니다. 기본 문법은 다음과 같습니다:

DECODE(expr, search1, result1 [, search2, result2, ...] [, default])
  • expr: 비교할 대상 값
  • search: 비교값
  • result: 일치할 경우 반환할 결과
  • default (선택): 일치하는 값이 없을 경우 반환

2. 기본 사용 예제

직원의 직급을 코드로 관리하면서, 해당 코드를 직급명으로 변환하는 간단한 예제입니다.

SELECT EMP_ID,
       JOB_GRADE,
       DECODE(JOB_GRADE, 
              'A', '사원', 
              'B', '대리', 
              'C', '과장', 
              'D', '부장',
              '기타') AS JOB_TITLE
FROM EMPLOYEES;

JOB_GRADE가 'A'면 '사원', 'B'면 '대리'로 변환되며, 일치하는 값이 없으면 '기타'가 반환됩니다.

3. 숫자 조건 처리 예제

고객의 등급을 숫자로 관리할 경우, 다음처럼 등급에 따라 등급명을 반환할 수 있습니다.

SELECT CUSTOMER_ID,
       DECODE(GRADE,
              1, '일반',
              2, '우수',
              3, '프리미엄',
              '미분류') AS GRADE_NAME
FROM CUSTOMERS;

4. NULL 처리와 함께 사용하기

DECODE 함수는 NULL 값을 비교할 수 있습니다. 단, NULL은 '=' 연산으로 비교가 되지 않으므로 특별한 주의가 필요합니다.

SELECT EMPLOYEE_ID,
       DECODE(COMMISSION_PCT, NULL, '커미션 없음', '커미션 있음') AS COMM_STATUS
FROM EMPLOYEES;

Oracle은 내부적으로 DECODE에서 NULL을 비교할 수 있도록 지원합니다.

5. DECODE vs CASE 비교

항목 DECODE CASE
표현 방식 간단한 조건에 적합 복잡한 논리 처리 가능
다형성 단일 표현식 기반 다양한 조건과 연산 가능
표준 여부 Oracle 전용 ANSI SQL 표준
NULL 비교 내부적으로 가능 명시적 IS NULL 조건 필요

6. 실무 활용 팁

  • 간단한 값 매핑에는 DECODE가 더 빠르고 읽기 쉬움
  • 여러 값을 조건에 따라 분기하는 IF/ELSE 구조를 대체 가능
  • 복잡한 연산이 필요한 경우 CASE 문과 병행 사용 추천
  • 보고서 출력 시 텍스트 가공에 매우 유용

7. 다국어 처리 예제

국가 코드에 따라 언어를 다르게 출력할 수 있습니다.

SELECT USER_ID,
       DECODE(COUNTRY_CODE,
              'KR', '한국어',
              'US', 'English',
              'CN', '中文',
              '기타') AS LANGUAGE
FROM USERS;

8. 성능 및 주의사항

  • 단순한 비교에는 성능상 유리하나, 많은 분기 조건일 경우 CASE가 더 관리 용이
  • 데이터 타입이 서로 다를 경우 오류가 발생할 수 있으므로 타입 일치 주의
  • IN 조건이나 복합 조건 비교에는 적합하지 않음

9. 결론

DECODE 함수는 Oracle SQL에서 매우 강력한 조건 분기 함수입니다. 간단한 로직을 빠르고 가독성 높게 처리할 수 있으며, 보고서 쿼리, 상태 코드 변환, 다국어 처리 등에 널리 사용됩니다. CASE 문과의 특성을 이해하고 상황에 맞게 병행 사용하면 SQL의 표현력과 유지보수성을 크게 향상할 수 있습니다.

출처

  • Oracle 공식 문서: https://docs.oracle.com/en/
  • Oracle SQL Language Reference: DECODE Function
  • 실무 프로젝트 기반 예제 정리