Question

Mon guide d'examen SQL Fundamentals 1 indique :

select NULLIF(1234, 123+1) from dual;

L'équation arithmétique n'est pas implicitement évaluée...

Cependant, lorsque je soumets la requête ci-dessous, le résultat est null - il semble que 123+1 est évalué (même si je sais que les requêtes sont différentes).

select NULLIF(124, 123+1) from dual;

Alors, qu'est-ce qui est correct (pour l'examen 1Z0-051, en tout cas) ?Les expressions sont-elles évaluées ou non ?

Était-ce utile?

La solution

Nullif() la fonction évalue à la fois les arguments et les retours NULL si argument1 égal à argument2.Dans ton cas 123+1 n'est pas égal à 1234. 123+1 est égal à 124 pas 1234.

le résultat est nul

Ça ne peut pas être null dans ton cas.

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

SUIVI: Mes 2 centimes

Ci-dessus NULLIF est équivalent au cas ci-dessous

CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END

Vous ne pouvez pas spécifier le littéral NULL pour la première expression.

Aussi de Documentation

Si les deux arguments sont des données numériques, alors Oracle Database détermine l'argument avec la priorité numérique supérieure, convertit implicitement l'autre argument en ce type de données et renvoie ce type de données.Si les arguments ne sont pas numériques, ils doivent être du même type de données, ou Oracle renvoie une erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top