Les équations arithmétiques sont-elles implicitement évaluées dans NULLIF()
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 ?
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.