Lässt man ein Script laufen, dass versucht ein Objekt anzulegen, dass schon existiert, habt man bisher einen Fehler wie beispielsweise „ORA-00955: name is already used by an existing object“ erhalten. Die Überprüfung, ob Fehler eines Scripts relevant sind, oder nur auf Grund schon existierender Objekte entstehen, war dementsprechend aufwändig – zumal in der Fehlermeldung nicht zu erkennen war, welches Objekt gemeint ist.
Andere Datenbanken können schon seit längerem eine Syntaxvariante mit „IF NOT EXISTS“ um genau solche Fehlermeldungen zu unterdrücken. Diese Funktion wurde in Oracle 23ai eingebaut und steht jetzt auch für Oracle 19c zur Verfügung.
Beispiel: Erzeugen einer Tabelle mittels Script
CREATE TABLE FOO (X NUMBER);
Führt man das Script erstmalig aus, bekommt man ein „Table created“ zurück. Ab dem nächsten Aufruf eben den Fehler „ORA-00955: name is already used by an existing object“.
Ändert man das Script auf
CREATE TABLE IF NOT EXISTS FOO (X NUMBER);
erhält man immer nur „Table created“, egal on die Tabelle schon existiert hat, oder neu angelegt wurde. Damit ist die Überprüfung, ob es in dem Logfile vom Script relevante Fehler gibt, viel einfacher geworden.
Den Zusatz IF NOT EXISTS kann man bei den meisten CREATE und DROP von Datenbank Objekte nutzen.
Ein Problem kann man damit aber nicht lösen: Was passiert, wenn beispielsweise bei einer Tabelle eine neu Spalte hinzugekommen ist? Dieser Check prüft nur ob das Objekt existiert, nicht ob es ident ist! Dieses Thema hat man aber auch bei allen anderen Datenbankherstellern.