Nullwerte schreiben und Spalten überspringen

Bei manchen Spalten darf beim Einfügen/Ändern von Werten nichts an die Datenbank gesendet werden. Grundsätzlich muss man unterscheiden zwischen der Zielstruktur-Feld-Eigenschaft "Leeren Wert bei SQL überspringen" und dem Senden einer expliziten NULL an die Datenbank. Beide Möglichkeiten können realisiert werden.

Leeren Wert überspringen


Eine Spalte kann bei einem UPDATE/INSERT übersprungen werden, wenn "Leeren Wert bei SQL überspringen" eines Zielstrukturfeldes auf "Ja" steht. Die Spalte wird dann übersprungen, wenn kein Feldwert vorhanden ist.

Wann ist kein Feldwert vorhanden? Praktisch, wenn die Funktion get empty flag(a) als Ergebnis true liefert. Der Feldwert kann auch explizit mit der Funktion set empty flag(a) auf leer gesetzt werden, es kann aber auch beim erfolglosen Parsen oder über diverse andere Funktionen geschehen. Hat ein Feld den Wert "" (also ein String der Länge 0), dann liefert die Funktion get empty flag(a) nicht "true". Bitte sehen Sie sich zu dieser Thematik den Abschnitt Empty Flag an.

Explizit NULL senden


Ein Spaltenwert wird als NULL an die Datenbank gesendet, wenn im Zielstrukturfeld als Wert @NULL@ steht. Der Wert kann nur über eine Funktion, aber nicht über einen Fixwert gesetzt werden. Die Option "Leeren Wert bei SQL überspringen" muss dabei auf "Nein" stehen.

Hinweis: In Datenbanken ist der symbolische Wert NULL zu unterscheiden von dem String 'NULL', der Zahl "0" und einem leeren String '' (oft auch leerer Wert genannt), welche tatsächliche Werte sind. Der symbolische Wert stellt auf Meta-Ebene dar, dass z. B. ein Tabellenfeld noch keinen Wert hat. In praktisch jedem Datenbank-Management-System kann man einen optischen Unterschied zwischen dem symbolischen Wert NULL und tatsächlichen Werten feststellen. SQL-Abfragen kennen diesen Unterschied auch.

Hinweis: Wenn Sie ein Zielstrukturfeld mit dem Wert @NULL@ belegen, dann hat das denselben Effekt wie die Funktion set empty flag(a). D. h. die Funktion get empty flag(a) würde danach true liefern und in einem Mappingtest würde das Feld mit "no value" angezeigt. Dennoch kann das explizite Schreiben des symbolischen NULL-Wertes in die Datenbank nur mit dem tatsächlichen Zielstruktur-Feldwert @NULL@ bewirkt werden, d. h. ein Zielstrukturfeld mit gesetztem Empty Flag allein ist nicht ausreichend für das Schreiben des symbolischen NULL-Wertes in die Datenbank.