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 |