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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top