Ein Spalten-Default greift normalerweise, wenn ein INSERT keinen Wert für die Spalte liefert. Schickt die Anwendung ausdrücklich NULL, bleibt die Spalte ohne besondere Definition leer. Oracle AI Database 26ai erweitert DEFAULT ON NULL: Mit der Option FOR INSERT AND UPDATE wird der Default auch verwendet, wenn ein UPDATE der Spalte ausdrücklich NULL zuweist.
1. Default für INSERT und UPDATE definieren
Ein Statusfeld kann beispielsweise bei fehlendem oder explizit auf NULL gesetztem Wert auf „NEU“ zurückfallen:
CREATE TABLE aufgaben (
aufgabe_id NUMBER PRIMARY KEY,
status VARCHAR2(20)
DEFAULT ON NULL FOR INSERT AND UPDATE 'NEU'
);
UPDATE aufgaben
SET status = NULL
WHERE aufgabe_id = 42;
Nach dem UPDATE enthält die Zeile den Defaultwert NEU. Wird status im UPDATE gar nicht erwähnt, bleibt der bisherige Wert wie üblich unverändert. Die Option gilt ebenso für den UPDATE-Zweig eines MERGE; für INSERTs greift sie auch im INSERT-Zweig von MERGE und bei Multitable-INSERTs.
2. INSERT-only und INSERT plus UPDATE unterscheiden
Die bisherige Variante DEFAULT ON NULL entspricht DEFAULT ON NULL FOR INSERT ONLY. Sie fängt NULL beim Einfügen ab. Wer die Aktualisierung ebenfalls abdecken möchte, muss den Geltungsbereich ausdrücklich mit FOR INSERT AND UPDATE angeben. Das ist besonders relevant, wenn APIs, Batchjobs oder APEX-Prozesse beim Leeren eines Formularfelds NULL übertragen.
Vorhandene NULLs werden durch die Änderung der Spaltendefinition nicht automatisch rückwirkend ersetzt. Bestandsdaten müssen separat geprüft und gegebenenfalls bereinigt werden.
3. Trigger und Anwendungen vorab prüfen
Ein Before-Row-Trigger sieht den bereits gesetzten Default und kann ihn gezielt überschreiben. Setzt ein solcher Trigger die Spalte anschließend selbst auf NULL, wird diese Trigger-Zuweisung nicht nochmals in den Default umgewandelt; wegen der impliziten NOT-NULL-Regel schlägt die DML-Operation fehl.
Prüfen Sie vor dem Rollout daher, ob NULL bisher bewusst „Wert löschen“ bedeutete, und durchsuchen Sie Trigger sowie Anwendungscode nach entsprechenden UPDATEs. Berücksichtigen Sie auch Schnittstellen und Replikationspfade. Der Default sollte eine fachlich passende Regel ausdrücken, nicht lediglich fehlerhafte Eingaben verdecken.
4. Dictionary und Rollout-Checkliste
Die Spaltenattribute lassen sich über USER_TAB_COLUMNS beziehungsweise ALL_TAB_COLUMNS untersuchen. Oracle dokumentiert dort unter anderem DEFAULT_ON_NULL und DEFAULT_ON_NULL_UPD. Nach der Änderung empfiehlt sich ein Test mit explizitem NULL für INSERT, UPDATE und – falls eingesetzt – beide Zweige eines MERGE.
- Fachlich festlegen, ob NULL bei dieser Spalte tatsächlich durch einen Standardwert ersetzt werden darf.
- Trigger, APEX-Prozesse, APIs und Batchjobs mit expliziten NULL-Zuweisungen identifizieren.
- Historische NULL-Werte getrennt auswerten und eine eventuelle Datenbereinigung planen.
- INSERT, UPDATE und MERGE in einer Testumgebung ausführen; erwartete Werte und Constraint-Fehler verifizieren.
- Nach dem Deployment Dictionary-Attribute und betroffene Anwendungspfade kontrollieren.
Fazit
DEFAULT ON NULL FOR INSERT AND UPDATE zentralisiert eine bislang oft in Anwendungscode verteilte Regel. Das kann Daten konsistenter machen, ändert aber den Vertrag der Spalte: NULL wird nicht mehr als gültiger gespeicherter Zustand akzeptiert. Mit einer gezielten Prüfung der fachlichen Bedeutung, Trigger und aufrufenden Anwendungen lässt sich die Funktion kontrolliert einführen.
Weiterführend: Oracles SQL-Referenz zu CREATE TABLE und DEFAULT ON NULL sowie die Dokumentation zu DBA_TAB_COLUMNS.