지정하는 표현식의 평가 결과가 NULL 또는 NOT NULL인지 여부에 따라 두 값 중 하나를 반환합니다.
구문
NVL2 ( expression, not_null_return_value, null_return_value )
인수
- expression
-
NULL 상태로 평가되는 표현식(열 이름 등)입니다.
- not_null_return_value
-
expression이 NOT NULL로 평가되면 반환되는 값입니다. not_null_return_value 값은 expression과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.
- null_return_value
-
expression이 NULL로 평가되면 반환되는 값입니다. null_return_value 값은 expression과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.
반환 타입
NVL2 반환 형식은 다음과 같이 결정됩니다.
-
not_null_return_value 또는 null_return_value이 NULL이면 not null 표현식의 데이터 형식이 반환됩니다.
not_null_return_value와 null_return_value 모두 NULL이 아닌 경우에는 다음과 같습니다.
-
not_null_return_value와 null_return_value의 데이터 형식이 동일하면 해당 데이터 형식이 반환됩니다.
-
not_null_return_value와 null_return_value의 숫자 데이터 형식이 다르면 가장 작으면서 호환도 가능한 숫자 데이터 형식이 반환됩니다.
-
not_null_return_value와 null_return_value의 날짜/시간 데이터 형식이 다르면 타임스탬프 데이터 형식이 반환됩니다.
-
not_null_return_value와 null_return_value의 문자 데이터 형식이 다르면 not_null_return_value의 데이터 형식이 반환됩니다.
-
not_null_return_value와 null_return_value의 데이터 형식이 숫자와 비숫자로 섞여 있으면 not_null_return_value의 데이터 형식이 반환됩니다.
중요
not_null_return_value의 데이터 형식이 반환되는 마지막 두 경우에서는 null_return_value가 묵시적으로 해당 데이터 형식으로 변환됩니다. 이때 데이터 형식이 서로 호환되지 않으면 함수가 중단됩니다.
사용 노트
expression 및 search 파라미터가 모두 null인 경우 NVL2와 유사한 방식으로 DECODE 함수을 사용할 수 있습니다. 차이점은, DECODE일 때는 result 파라미터의 값과 데이터 형식이 모두 반환되는 데 있습니다. 이와는 반대로 NVL2일 때는 not_null_return_value 또는 null_return_value 파라미터의 값 중에서 함수에서 선택하는 값과 함께 not_null_return_value의 데이터 형식이 반환됩니다.
예를 들어 column1이 NULL이라고 가정하면 다음 두 쿼리에서 동일한 값이 반환됩니다. 하지만 DECODE의 반환 값 데이터 형식은 INTEGER인 반면 NVL2의 반환 값 데이터 형식은 VARCHAR입니다.
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
예제
다음은 일부 샘플 데이터를 수정한 후 두 필드를 평가하여 적합한 사용자 연락처를 제공하는 예입니다.
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo';
select (firstname + ' ' + lastname) as name,
nvl2(email, email, phone) AS contact_info
from users
where state = 'WA'
and lastname like 'A%'
order by lastname, firstname;
name contact_info
--------------------+-------------------------------------------
Aphrodite Acevedo (906) 632-4407
Caldwell Acevedo Nunc.sollicitudin@Duisac.ca
Quinn Adams vel@adipiscingligulaAenean.com
Kamal Aguilar quis@vulputaterisusa.com
Samson Alexander hendrerit.neque@indolorFusce.ca
Hall Alford ac.mattis@vitaediamProin.edu
Lane Allen et.netus@risusDonec.org
Xander Allison ac.facilisis.facilisis@Infaucibus.com
Amaya Alvarado dui.nec.tempus@eudui.edu
Vera Alvarez at.arcu.Vestibulum@pellentesque.edu
Yetta Anthony enim.sit@risus.org
Violet Arnold ad.litora@at.com
August Ashley consectetuer.euismod@Phasellus.com
Karyn Austin ipsum.primis.in@Maurisblanditenim.org
Lucas Ayers at@elitpretiumet.com