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

NVL, NVL2 사용법 및 차이

 

데이터 처리를 할때 NULL 처리는 항상 중요합니다.

이런 NULL 데이터 처리를 간편하게 하기위해 오라클(oracle)에서는

NLV 함수를 제공하고 있습니다.

오라을 외 다른 데이터베이스에서는 nvl 사용이 불가능 합니다.

 

1. NVL 함수 [ NVL( 대상 , null인 경우 값 ) ] 

대상의 값이 NULL 인 경우 지정한 값으로 치환합니다.

모든 데이터 타입에 적용이 가능합니다.

ex ) select nvl(GOODS_QTY, 0)  from GOODS;

-> GOODS테이블에 GOODS_QTY가 null 일 경우 0으로 치환

 

2. NVL2 함수 [ NVL2( 대상, null 아닌경우 값, null인 경우 값 ) ]

대상의 값이 NULL 인 경우NULL이 아닌경우를 지정한 값으로 치환합니다.

NVL2 함수는 DECODE함수와 비슷한 IF문의 기능을 가지고 있습니다.

개인적으로는 DECODE 보다 더 간편하다고 생각하네요.

때에 따라서 NVL2와 DECODE를 사용하시면 될것 같습니다.

 

ex ) select NVL2(GOODS_QTY, GOODS_QTY, '재고없음')  from GOODS;

-> GOODS테이블에 GOODS_QTY가 NULL이 아닌경우 GOODS_QTY 으로 치환

-> GOODS테이블에 GOODS_QTY가 NULL인 경우 '재고없음' 으로 치환

 

NVL, NVL2 예제

WITH GOODS AS
(
 SELECT '선풍기' AS GOODS_NM, '39000' AS GOODS_PRICE, '77' AS GOODS_QTY FROM DUAL UNION ALL
 SELECT '노트북' AS GOODS_NM, '420000' AS GOODS_PRICE, '62' AS GOODS_QTY FROM DUAL UNION ALL
 SELECT '안경' AS GOODS_NM, '30000' AS GOODS_PRICE, null AS GOODS_QTY FROM DUAL 
)

SELECT GOODS_NM
	, GOODS_PRICE
   	, GOODS_QTY
    , NVL(GOODS_QTY,0) as nlv1
    , NVL2(GOODS_QTY,GOODS_QTY,'재고없음') AS nvl2 
FROM GOODS;

 

댓글

Designed by JB FACTORY