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

Función NVL2 en Oracle

Este tutorial de SQL proporciona explicaciones, ejemplos de la función NVL2 en Oracle

La función NVL2 es una función de anidamiento. Examina la primera impresión, si la primera impresión no es nula, entonces la función NVL2 devuelve la segunda expresión. si la primera impresión es nula, devuelve la tercera expresión.

expr1 :son los valores de origen o la expresión que pueden contener nulos. Puede proporcionar el nombre de la columna, la función en el nombre de la columna
expr2 :Este es el valor de la expresión que se devuelve si expr1 no es nulo
expr3 :Este es el valor de la expresión que se devuelve si expr1 es nulo

El argumento expr1 puede tener cualquier tipo de datos. Los argumentos expr2 y expr3 pueden tener cualquier tipo de datos excepto LONG.

SQL> select nvl2(user_name,1,2) from apps.fnd_user where rownum < 5;

NVL2(USER_NAME,1,2)
-------------------
1
1
1
1

SQL> select nvl2(end_date,1,2) from apps.fnd_user where rownum < 5;

NVL2(END_DATE,1,2)
------------------
1
2
1
1

Si los tipos de datos de expr2 y expr3 son diferentes:

Si expr2 son datos de caracteres, Oracle Database convierte expr3 al tipo de datos de expr2 antes de compararlos, a menos que expr3 sea una constante nula. En ese caso, no es necesaria una conversión de tipo de datos. Oracle devuelve VARCHAR2 en el conjunto de caracteres de expr2.

Si expr2 es numérico, Oracle determina qué argumento tiene la precedencia numérica más alta, convierte implícitamente el otro argumento a ese tipo de datos y devuelve ese tipo de datos.

El tipo de datos del tipo de retorno siempre es el mismo que el tipo de datos de expr2 a menos que expr2 sean datos de caracteres, cuyo valor de retorno de caso siempre es varchar2

SQL> select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5;
select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5
*
ERROR at line 1:
ORA-01722: invalid number

SQL> select nvl2(end_date,'a',1) from apps.fnd_user where rownum < 5;

N
-
a
1
a
a

Uso 

SELECT last_name, salary, NVL2(commission_pct,
salary + (salary * commission_pct), salary) income
FROM employees WHERE last_name like 'B%'
ORDER BY last_name;

Artículos relacionados

Funciones de fila única en Sql
Función NULLIF en Oracle
Instrucción de actualización en Oracle
Función Fusionar en Oracle
Función LISTAGG de Oracle
Funciones de fecha de Oracle