Oracle/SQL2019. 3. 29. 09:35

NVL, NVL2 함수는 모든 인수를 평가하고, 이로 인한 에러나 부하가 발생할 수 있다.

 

아래에서 NVL 함수를 사용한 2-1번 쿼리는 에러가 발생했다. 평가할 필요가 없는 1 / 0을 평가했기 때문이다. COALESCE 함수를 사용한 2-2번 쿼리를 에러가 발생하지 않는 것을 확인할 수 있다.

-- 1-1
SELECT NVL (1, 1 / 0) AS c1 FROM DUAL;

ORA-01476: 제수가 0 입니다

-- 1-2
SELECT COALESCE (1, 1 / 0) AS c1 FROM DUAL;

C1
--
 1

1개의 행이 선택되었습니다.

 

NVL2 함수도 NVL 함수와 동일한 이유로 에러가 발생한다. DECODE 함수와 CASE 표현식은 에러가 발생하지 않는 것을 확인할 수 있다.

-- 2-1
SELECT NVL2 (1, 2, 1 / 0) AS c1 FROM DUAL;

ORA-01476: 제수가 0 입니다

-- 2-2
SELECT DECODE (1, NULL, 1 / 0, 2) AS c1 FROM DUAL;

C1
--
 2

1개의 행이 선택되었습니다.

-- 2-3
SELECT CASE WHEN 1 IS NULL THEN 1 / 0 ELSE 2 END AS c1 FROM DUAL;

C1
--
 2

1개의 행이 선택되었습니다.

'Oracle > SQL' 카테고리의 다른 글

연속 값 그룹핑  (0) 2019.09.02
ORA-00937 에러  (0) 2019.04.22
용어 단어 분리  (0) 2019.03.14
클로저 테이블 #2  (0) 2019.02.01
클로저 테이블 #1  (0) 2019.01.31
Posted by 정희락_