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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top