sql >> Base de Datos >  >> RDS >> Oracle

Función NVL2() en Oracle

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"