Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função NVL2 no Oracle


Este tutorial SQL fornece explicações, exemplos para a função NVL2 no Oracle

A função NVL2 é uma função de aninhamento. Examina a primeira impressão, se a primeira impressão não for nula, a função NVL2 retorna a segunda expressão. se a primeira impressão for nula, ela retornará a terceira expressão.

expr1 :são os valores de origem ou expressão que podem conter null. Você pode fornecer o nome da coluna, função no nome da coluna
expr2 :Este é o valor da expressão que é retornada se o expr1 não for nulo
expr3 :Este é o valor da expressão que é retornada se o expr1 for nulo

O argumento expr1 pode ter qualquer tipo de dados. Os argumentos expr2 e expr3 podem ter qualquer tipo de dados, exceto 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


Se os tipos de dados de expr2 e expr3 forem diferentes:

Se expr2 for dados de caractere, o Oracle Database converterá expr3 no tipo de dados de expr2 antes de compará-los, a menos que expr3 seja uma constante nula. Nesse caso, uma conversão de tipo de dados não é necessária. O Oracle retorna VARCHAR2 no conjunto de caracteres de expr2.

Se expr2 for numérico, o Oracle determinará qual argumento tem a precedência numérica mais alta, converte implicitamente o outro argumento para esse tipo de dados e retorna esse tipo de dados.

O tipo de dados do tipo de retorno é sempre o mesmo que o tipo de dados de expr2, a menos que expr2 seja dados de caractere, cujo valor de retorno é sempre 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;

Artigos relacionados

Funções de linha única no Sql
Função NULLIF no Oracle
Instrução de atualização no oracle
Função de coalescência no Oracle
Função LISTAGG do Oracle
funções de data do oracle