MS SQL vs Oracle empty strings

BaseBallBatBoy

Erfahrenes Mitglied
Hallo

Ich übernehme Daten aus einer MS SQL 2008R2 DB nach Oracle 11g EE. Die Source Tabellen kann ich nicht beeinflussen.
In MS SQL gibt es eine Tabelle mit CODE VARCHAR(20) NOT NULL. Ein Eintrag darin ist ein empty string. Übernehme ich diesen Wert nach Oracle, wird Oracle den empty string als NULL abspeichern wollen. Weil auch die Target Tabelle als NOT NULL definiert ist, wird somit ein Fehler auftreten.
Mein Frage lautet nun, was wäre in so einem Fall ein gutes vorgehen? Wie lassen sich sonst empty strings mit Oracle abspeichern?

Gruss
 
Moin BaseBallBatBoy,

Mein Frage lautet nun, was wäre in so einem Fall ein gutes vorgehen? Wie lassen sich sonst empty strings mit Oracle abspeichern?

Antwort: es gibt da kein gutes Vorgehen (leider).
Oracle speichert keine Strings der Länge 0 - ein Leerstring wird immer als NULL interpretiert.

Du kannst dich nicht rausdrehen aus der Nummer, indem du das Feld als "NOT NULL Default 'whatever'" deklarierst - wird bei einem INSERT ein Leerstring übergeben, wird aus Sicht Oracle versucht, explizit einen NULL-Wert einzufügen - ergibt den dir bekannten Fehler.

Du kannst also nur einen der beiden möglichen Kompromisse nehmen bei der Datenübernahme aus anderen DBMSen:
- entweder sicherstellen, dass statt im Falle Originalfeld = Leerstring ein leerer String bestehend aus einem Leerzeichen geschrieben wird (was eine Verfälschung der Originaldaten ist)

- oder das Feld mit bedauerndem Schulterzucken als NULLABLE in Oracle anzulegen (was dem Informationsgehalt der Originaldaten schon näher kommt, denn auch in den Originaldaten hat kein Enduser bewusst einen Leerstring in das Varchar(20)-Feld eingegeben. Somit ist das Feld //eigentlich// ungefüllt == undefined == NULL, wäre meine Argumentation).

So oder so musst du dich an dieser Sollbruchstelle entscheiden - eine Eins-zu-Eins-Übernahme aus MSSQL (oder auch jedem anderen mir bekannten Nicht-Oracle-System) führt bei Leerstrings zu dieser Interpretation als NULL-Wert und damit zum Abgrätschen.

Dennoch schönen Montagmorgen
Biber
 
Zuletzt bearbeitet:
Ich habe dies schon vermutet und wir werden die Optionen nun im Team besprechen. Sage bescheid für was man sich dann entscheiden hat. Ich wäre für NULLABLE auf Oracle Seite, hat einfach zur Folge, dass jede VARCHAR Spalte als NULLABLE definiert werden muss.
 
Zurück