DataBase/Oracle

[Oracle] 오라클 NVL, NVL2 함수 차이점 및 사용법(NULL 처리)

mingmongs 2025. 6. 1. 16:34

title

오라클의 내장 함수 중 컬럼의 값이 NULL인 경우에 대한
처리를 해주는 NVL과 NVL2 함수가 있다.
이 함수들은 오라클에서만 사용이 가능하고,
다른 데이터베이스에서는 사용할 수 없다.
이 두 개의 함수의 차이점과 사용법에 대하여 알아보자.

 

1) NVL, NVL2 함수 차이점

: NVL 함수는 컬럼의 값이 NULL인 경우,
특정 값으로 반환하기 위해 사용한다.

NVL2 함수는 컬럼의 값이 NULL인 경우와 NULL이 아닌 경우
두 가지 모두 특정 값으로 반환할 수 있다는 차이점이 있다.

NVL 함수는 NULL인 경우 단순 기본값을 부여하기 위해서 자주 사용하며,
NVL2 함수는 NULL을 기준으로 IF ELSE문처럼 특정 값을 반환할 수 있다.

 

2) NVL 함수

2-1) 문법

: NVL(NULL인지 검사할 데이터 또는 컬럼, NULL일 경우 반환할 값)


2-2) 예시

아래 PRODUCT_TABLE 테이블을 예시로 설명해보겠다.

img1



※ 참고: 위 테이블은 아래 쿼리로 임시 테이블을 구성한 것이다.

WITH PRODUCT_TABLE AS (
    SELECT 'APPLE' AS PRODUCT, 10 AS QUANTITY FROM DUAL
    UNION ALL
    SELECT 'ORANGE' AS PRODUCT, 3 AS QUANTITY FROM DUAL
    UNION ALL
    SELECT 'GRAPE' AS PRODUCT, NULL AS QUANTITY FROM DUAL
    UNION ALL
    SELECT 'BANANA' AS PRODUCT, 5 AS QUANTITY FROM DUAL
    UNION ALL
    SELECT 'ONION' AS PRODUCT, NULL AS QUANTITY FROM DUAL  
)


아래 예시는 상품의 수량이 NULL인 경우 0으로 출력하도록 작성한 쿼리이다.

SELECT PRODUCT, -- 상품
       NVL(QUANTITY, 0) AS PROD_QUANTITY -- 수량
FROM PRODUCT_TABLE;

 

결과값

img2

 

3) NVL2 함수

3-1) 문법

NVL2(NULL인지 검사할 데이터 또는 컬럼, NULL이 아닐 경우 반환할 값, NULL일 경우 반환할 값)


3-2) 예시

아래 예시는 상품의 수량이 NULL이 아닐 경우 Y를,

NULL인 경우 N을 출력하도록 작성한 쿼리이다.

SELECT PRODUCT, -- 상품
       NVL2(QUANTITY, 'Y', 'N') AS SALE_FLAG -- 판매여부
FROM PRODUCT_TABLE;


결과값

img3

 

 

[reference]
https://infjin.tistory.com/138
https://gent.tistory.com/613