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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top