상세 컨텐츠

본문 제목

오라클 NVL, NVL2 함수의 예제

프로그래밍/Oracle

by ........? 2016. 3. 3. 10:43

본문

오라클 NVL, NVL2 함수의 예제

 

오라클 쿼리에서 NULL 처리는 매우매우 중요합니다.

 

특히나 WHERE 절에서 NULL 처리는 원하는 데이터 추출을 위해 필수조건이 되는 경우도 있습니다.

 

■ NVL 함수의 필요성

--예제1

SELECT *
  FROM (SELECT 'ABCDEDF' AA FROM DUAL
         UNION ALL
        SELECT 'ZYDX' AA FROM DUAL
         UNION ALL
        SELECT '' AA FROM DUAL)
 WHERE AA NOT LIKE 'Z%'
;

--예제1 결과

 

--Z 로 시작하지 않는 데이터 추출시 NULL 데이터 제외

 

 

 

 

--예제2

SELECT *
  FROM (SELECT 'ABCDEDF' AA FROM DUAL
         UNION ALL
        SELECT 'ZYDX' AA FROM DUAL
         UNION ALL
        SELECT '' AA FROM DUAL)
 WHERE NVL(AA,'A') NOT LIKE 'Z%'
;

 

--예제2 결과

 

--Z 로 시작하지 않는 데이터 추출시 NVL 함수를 통한 NULL 데이터 포함

 

NVL 함수를 통해 NULL 데이터에 대한 처리 전 후 데이터 결과의 차이

 

 

 

NVL VS NVL2

1. NVL 함수는 NVL(칼럼,지정값) 의 형태로 칼럼의 데이터가 NULL 일경우 지정값 반환

 

2. NVL2 함수는 NVL(칼럼,지정값1,지정값2) 의 형태로 칼럼의 데이터가 NULL 이 아닐 경우 지정값1을, NULL 일 경우 지정값2 반환

 

--NVL VS NVL2 예제

SELECT AA,
       NVL(AA,'X') NVL_AA,
       NVL2(AA,'O','X') NVL2_AA,
       DECODE(AA,NULL,'X','O') DECODE_AA
  FROM (SELECT 'TEST' AA
          FROM DUAL
         UNION ALL
        SELECT '' AA
          FROM DUAL)
;

--NVL VS NVL2 예제 결과 

 

 

--NVL2 함수의 경우 DBLINK 를 통한 데이터 조회시 ORA-22992 에러가 발생할 수 있으므로 NVL2보단 DECODE 함수를 활용하는 방법을 주로 사용중입니다.

 

 

 

 

 

 

 

 

 

관련글 더보기

댓글 영역