본문 바로가기
Database/Oracle

[ORACLE] NVL2() 함수로 NULL 유무에 따른 조건 처리 쉽게 구현하기

by Papa Martino V 2025. 6. 7.
728x90

오라클 NVL2() 함수로 NULL 유무에 따른 조건 처리 쉽게 구현하기
[Oracle] NVL2

 

1. NVL2 함수란?

Oracle SQL에서 NVL2() 함수는 주어진 표현식이 NULL이 아닌 경우NULL인 경우를 구분하여 각각 다른 결과를 반환할 수 있도록 해주는 조건 분기 함수입니다. IF-ELSE와 유사한 형태를 SQL 내에서 간단히 구현할 수 있어 실무에서 매우 유용하게 사용됩니다. 기본 문법은 다음과 같습니다:

NVL2(expr1, expr2, expr3)
  • expr1: NULL 여부를 판단할 값
  • expr2: expr1이 NULL이 아닐 경우 반환
  • expr3: expr1이 NULL일 경우 반환

2. 기본 사용 예제

다음은 직원의 보너스가 있는 경우와 없는 경우를 구분하여 다른 메시지를 출력하는 예제입니다.

SELECT EMPLOYEE_NAME,
       BONUS,
       NVL2(BONUS, '보너스 있음', '보너스 없음') AS BONUS_STATUS
FROM EMPLOYEES;

BONUS 칼럼이 NULL이면 '보너스 없음', 값이 있으면 '보너스 있음'이 출력됩니다.

3. 숫자 연산 예제

NVL2를 활용하면 NULL 여부에 따라 숫자 연산 방식도 바꿀 수 있습니다.

SELECT ORDER_ID,
       NVL2(DISCOUNT, PRICE * (1 - DISCOUNT), PRICE) AS FINAL_PRICE
FROM ORDERS;

DISCOUNT가 존재하면 할인을 적용하고, NULL이면 원가 그대로를 반환합니다.

4. 날짜 처리 예제

NVL2로 등록일이 없는 경우 현재 날짜를 대신 사용하도록 처리할 수 있습니다.

SELECT USER_ID,
       NVL2(REG_DATE, REG_DATE, SYSDATE) AS VALID_DATE
FROM USERS;

등록일이 NULL이면 시스템 날짜를 대신 보여줍니다.

5. 실무 활용 예제

5-1. 고객 상태 분류

SELECT CUSTOMER_NAME,
       LAST_LOGIN,
       NVL2(LAST_LOGIN, '활동 중', '미접속') AS STATUS
FROM CUSTOMERS;

5-2. 배송 상태 분기 처리

SELECT ORDER_ID,
       DELIVERY_DATE,
       NVL2(DELIVERY_DATE, '배송 완료', '배송 예정') AS DELIVERY_STATUS
FROM ORDERS;

6. NVL vs NVL2 vs COALESCE 비교

함수명 기능 차이점
NVL NULL이면 대체값 반환 2개의 인자 사용
NVL2 NULL 여부에 따라 두 결과 중 선택 3개의 인자 사용
COALESCE 여러 인자 중 첫 번째 NOT NULL 반환 가변 인자 수, ANSI SQL 표준

7. 주의사항

  • 타입 일치 주의: expr2와 expr3은 데이터 타입이 같아야 함
  • 인덱스 주의: WHERE 절에 NVL2를 사용하면 인덱스 효율이 낮아질 수 있음
  • CASE WHEN과 차이 이해: NVL2는 단순 조건일 때 더 간결함

8. 고급 활용 팁

  • 로그 테이블에 값 유무에 따른 상태 로그 기록
  • VIEW 정의 시 NULL 기반 조건 표현 간소화
  • 보고서에서 문구 처리 시 가독성 개선에 유용
-- 예: NULL 유무에 따라 상태 텍스트 지정
SELECT ITEM_NAME,
       NVL2(EXPIRE_DATE, '유통 중', '유통기한 미등록') AS EXPIRE_STATUS
FROM PRODUCTS;

9. 결론

Oracle의 NVL2 함수는 SQL 내에서 간단한 조건 분기 로직을 처리할 수 있는 매우 유용한 함수입니다. NVL보다 표현력이 더 풍부하며, 복잡한 CASE 문 없이도 간결하고 직관적인 쿼리를 구성할 수 있습니다. 실무에서는 보고서, 통계 분석, UI 데이터 처리 등 다양한 영역에서 활용할 수 있으며, 타입과 인덱스 관련 주의사항만 잘 숙지하면 효과적인 SQL 작성을 도와줍니다.

출처

  • Oracle 공식 문서: https://docs.oracle.com/en/
  • Oracle SQL Language Reference (NVL2 Functions)
  • 현업 개발 경험 기반 작성 및 예제 구성
728x90