En Oracle Database, el NVL2()
La función nos permite reemplazar valores nulos con otro valor.
Es similar al NVL()
función, excepto que acepta tres argumentos en lugar de dos. Esto nos permite especificar un valor diferente para devolver en caso de que el primer argumento no sea nulo.
Sintaxis
La sintaxis es así:
NVL2(expr1, expr2, expr3)
Si expr1
no es nulo, entonces NVL2
devuelve expr2
. Si expr1
es nulo, entonces NVL2
devuelve expr3
.
Ejemplo
Aquí hay un ejemplo para demostrarlo:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultado:
3
El primer argumento fue nulo, por lo que se devolvió el tercer argumento.
Y esto es lo que sucede cuando el primer argumento no es nulo:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultado:
2
Cuando los valores de reemplazo son nulos
Si el segundo o tercer argumento es nulo, podría terminar con un resultado nulo.
Ejemplo:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Resultado:
r1 r2 _________ _________ (null) (null)
Con respecto a la primera línea SET NULL '(null)';
, agregué esta línea para que mi sesión SQLcl devuelva ese valor siempre que el resultado sea nulo.
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar que se devuelva una cadena diferente (como he hecho aquí).
Recuento de argumentos no válidos
Llamar a la función sin pasar ningún argumento da como resultado un error:
SELECT NVL2()
FROM DUAL;
Resultado:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
Y pasar demasiados argumentos también provoca un error:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Resultado:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"