Función NVL2
Devuelve uno de los dos valores, en función de si una expresión especificada toma un valor NULL o NOT NULL.
Sintaxis
NVL2 ( expression, not_null_return_value, null_return_value )
Argumentos
- expresión
-
Una expresión, como un nombre de columna, que evalúa estados nulos.
- not_null_return_value
-
El valor devuelto si la expression (expresión) toma un valor NOT NULL. El valor not_null_return_value debe tener los mismos tipos de datos que expression (expresión) o ser convertible implícitamente a ese tipo de datos.
- null_return_value
-
El valor de retorno si expression (expresión) toma un valor NULL. El valor null_return_value debe tener los mismos tipos de datos que expression (expresión) o ser convertible implícitamente a ese tipo de datos.
Tipo de retorno
El tipo de retorno NVL2 se determina de la siguiente manera:
-
Si alguno de los valores not_null_return_value o null_return_value es nulo, se devuelve el tipo de datos de la expresión no nula.
Si ninguno de los valores not_null_return_value y null_return_value es nulo:
-
Si los valores not_null_return_value y null_return_value tienen el mismo tipo de datos, se devuelve ese tipo de datos.
-
Si los valores not_null_return_value y null_return_value tienen tipos de datos numéricos diferentes, se devuelve el tipo de dato numérico compatible que sea menor.
-
Si los valores not_null_return_value y null_return_value tienen tipos de datos de fecha y hora diferentes, se devuelve un tipo de dato de marca temporal.
-
Si los valores not_null_return_value y null_return_value tienen tipos de datos de caracteres diferentes, se devuelve el tipo de dato de not_null_return_value.
-
Si los valores not_null_return_value y null_return_value tienen tipos de datos numéricos y no numéricos mezclados, se devuelve el tipo de dato de not_null_return_value.
importante
En los últimos dos casos en los que se devuelve el tipo de dato not_null_return_value, null_return_value está vinculado implícitamente a ese tipo de dato. Si los tipos de datos son incompatibles, la función falla.
Notas de uso
Función DECODE se puede utilizar de manera similar a NVL2 cuando los parámetros expression y search son los dos nulos. La diferencia es que, para DECODE, el valor devuelto será el valor y el tipo de datos del parámetro result. Por el contrario, en el caso de NVL2, el valor devuelto tendrá el valor del parámetro not_null_return_value o del parámetro null_return_value, el que haya seleccionado la función, pero tendrá el tipo de datos de not_null_return_value.
Por ejemplo, si se asume que column1 es NULL, las siguientes consultas devolverán el mismo valor. No obstante, el tipo de datos de valor de retorno DECODE será INTEGER y el tipo de datos del valor de retorno NVL2 será VARCHAR.
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
Ejemplo
En el siguiente ejemplo, se modifican algunos datos de muestra y, luego, se evalúan dos campos para proporcionar la información de contacto adecuada para los usuarios:
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