NULL in der Oracle Datenbank


Das Verhalten von NULL verursacht immer wieder Verwirrung. Obwohl die grundlegende Idee der NULLfehlende Daten zu repräsentieren – recht einfach ist, gibt es einige Besonderheiten. Anstatt des Ist-gleich-Operators (= NULL) muss man zum Beispiel IS NULL verwenden. Bei der Oracle Daten­bank gehen die „Besonderheiten“ aber noch weiter. Einerseits, weil sie NULL nicht immer so behandelt, wie es der Standard vorsieht. Andererseits aber auch, weil sie einen ganz „speziellen“ Umgang mit NULL in Indizes hat.

Der SQL-Standard definiert NULL nicht als Wert, sondern als Platzhalter für einen fehlenden Wert. Folgerichtig kann kein Wert NULL sein. Die Oracle Datenbank behandelt einen leeren String aber wie NULL:

   SELECT     '0 IS NULL???' AS "what is NULL?" FROM dual
    WHERE      0 IS NULL
UNION ALL
   SELECT    '0 is not null' FROM dual
    WHERE     0 IS NOT NULL
UNION ALL
   SELECT ''''' IS NULL???'  FROM dual
    WHERE    '' IS NULL
UNION ALL
   SELECT ''''' is not null' FROM dual 
    WHERE    '' IS NOT NULL
what is NULL?
--------------
0 is not null
'' IS NULL???

Um die Verwirrung zu vervollständigen, gibt es natürlich auch einen Fall, bei dem die Oracle Datenbank eine NULL wie einen leeren String behandelt:

SELECT dummy
     , dummy || ''
     , dummy || NULL
  FROM dual
D D D
- - -
X X X

Die Verbindung der Spalte DUMMY (immer mit 'X' gefüllt) mit NULL sollte NULL ergeben.

Das Konzept der NULL kommt in vielen Programmiersprachen vor. Aber egal wohin man blickt, ein leerer String ist niemals NULL. Ausgenommen bei der Oracle Datenbank. Hier ist es sogar unmöglich, einen leeren String in einem VARCHAR2-Feld abzuspeichern. Wenn man es versucht, wird einfach NULL gespeichert.

Diese Besonderheiten ist nicht nur merkwürdig, sondern sogar gefährlich. Insbesondere da die NULL-Kuriosität bei der Indizierung weitergeht.

Wenn dir gefällt, wie ich die Dinge erkläre, wirst du meine Kurse lieben.

Über den Autor

Photo of Markus Winand
Markus Winand stimmt Entwickler auf SQL-Performance ein. Er hat das Buch SQL Performance Explained veröffentlicht und bietet inhouse Schulungen sowie Tuning-Leistungen auf http://winand.at/ an.