As equações aritméticas são avaliadas implicitamente em NULLIF()
Pergunta
Meu Guia do exame SQL Fundamentals 1 afirma:
select NULLIF(1234, 123+1) from dual;
A equação aritmética não é avaliada implicitamente...
No entanto, quando envio a consulta abaixo, o resultado é null
- parece que 123+1 é avaliado (embora eu saiba que as consultas são diferentes).
select NULLIF(124, 123+1) from dual;
Então, o que é correto (para o exame 1Z0-051, pelo menos)?As expressões são avaliadas ou não?
Solução
Nullif()
função avalia argumentos e retorna NULL
se argument1
igual a argument2
.No seu caso 123+1
não é igual a 1234
. 123+1
é igual a 124
não 1234
.
o resultado é nulo
Não pode ser null
no seu caso.
SQL> select nullif(1234, 123+1) as res
2 from dual;
RES
----------
1234
SQL> select nullif(1234, 1233+1) as res
2 from dual
3 ;
RES
----------
NULL
SEGUIR: Meus 2 centavos
O de cima NULLIF
é equivalente ao caso abaixo
CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END
Você não pode especificar o literal NULL
para a primeira expressão.
Também de documentação
Se ambos os argumentos forem tipos de dados numéricos, o banco de dados Oracle determina o argumento com a precedência numérica mais alta, converte implicitamente o outro argumento para esse tipo de dados e retorna esse tipo de dados.Se os argumentos não forem numéricos, eles devem ter o mesmo tipo de dados ou o Oracle retornará um erro.