von Markus Winand.

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

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

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.

Inhalt

  1. NULL im Index — Jeder Index ist ein partieller Index

  2. NOT NULL Constraints — beeinflussen die Indexnutzung

  3. Partielle Indizes emulieren — mit funktions-basierter Indizierung

Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2010-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO