¿Las ecuaciones aritméticas se evalúan implícitamente en NULLIF()?
Pregunta
Mi guía de examen de SQL Fundamentals 1 dice:
select NULLIF(1234, 123+1) from dual;
La ecuación aritmética no se evalúa implícitamente...
Sin embargo, cuando envío la consulta a continuación, el resultado es null
- parece que 123+1 es evaluado (aunque sé que las consultas son diferentes).
select NULLIF(124, 123+1) from dual;
Entonces, ¿cuál es correcto (al menos para el examen 1Z0-051)?¿Se evalúan las expresiones o no?
Solución
Nullif()
La función evalúa ambos argumentos y devuelve. NULL
si argument1
igual a argument2
.En tu caso 123+1
no es igual a 1234
. 123+1
es igual a 124
no 1234
.
el resultado es nulo
No puede ser null
en tu 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
HACER UN SEGUIMIENTO: mis 2 centavos
Lo anterior NULLIF
es equivalente al siguiente caso
CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END
No se puede especificar el literal NULL
para la primera expresión.
También de documentación
Si ambos argumentos son tipos de datos numéricos, entonces Oracle Database determina el argumento con la precedencia numérica más alta, convierte implícitamente el otro argumento en ese tipo de datos y devuelve ese tipo de datos.Si los argumentos no son numéricos, entonces deben ser del mismo tipo de datos, o Oracle devuelve un error.