Werden arithmetische Gleichungen implizit in NULLIF () ausgewertet
Frage
Mein SQL Fundamentals 1 Prüfungsleitfaden besagt,
select NULLIF(1234, 123+1) from dual;
Die arithmetische Gleichung wird nicht implizit ausgewertet...
Wenn ich jedoch die folgende Abfrage übermittle, lautet das Ergebnis null
- es scheint, dass 123+1 is ausgewertet (obwohl ich weiß, dass die Abfragen unterschiedlich sind).
select NULLIF(124, 123+1) from dual;
Also, was ist richtig (jedenfalls für die 1Z0-051-Prüfung)?Werden Ausdrücke ausgewertet oder nicht?
Lösung
Nullif()
funktion wertet sowohl Argumente als auch Rückgaben aus NULL
wenn argument1
gleich zu argument2
.In Ihrem Fall 123+1
ist nicht gleich 1234
. 123+1
ist gleich 124
nicht 1234
.
das Ergebnis ist null
Es kann nicht sein null
in deinem Fall.
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
FOLGEMAßNAHMEN: Meine 2 Cent
Das oben Genannte NULLIF
entspricht dem folgenden Fall
CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END
Sie können das Literal nicht angeben NULL
für den ersten Ausdruck.
Auch von Dokumentation
Wenn beide Argumente numerische Datentypen sind, dann Oracle Database bestimmt implizit das Argument mit der höheren numerischen Priorität konvertiert das andere Argument in diesen Datentyp und gibt diesen zurück Datentypen.Wenn die Argumente nicht numerisch sind, müssen sie von der gleicher Datentyp oder Oracle gibt einen Fehler zurück.