2012-03-28 7 views
0

Ich versuche, einige Datensätze aus einer Tape-Datei in eine Tabelle in der Oracle-Datenbank eingeben. Ich versuche dies mit Hilfe der Kontrolldatei zu tun.
In der Tape-Datei gibt es jedoch nur wenige Leerzeichen, die auf ein Primärschlüsselattribut ausgerichtet sind. Beim Migrieren des Datensatzes betrachtet der Loader diese Leerzeichen als NULL und daher als Fehler beim Werfen.

Gibt es eine Möglichkeit, die Leerzeichen in das Primärschlüsselattribut einzufügen?
Wie können Leerzeichen in einem Attribut als Primärschlüssel zugewiesen werden?

Vielen Dank im Voraus!

+1

Ist die Primärschlüsselspalte ein VARCHAR2-Typ? – Ollie

+0

hast du das CONSTANT-Schlüsselwort in der Steuerdatei versucht? – tbone

+0

Danke ... Ich habe die Lösung. Ich habe das Schlüsselwort PRESERVE BLANKS in meine Kontrolldatei eingefügt und dann werden die Leerzeichen akzeptiert. –

Antwort

1

Ein Primärschlüssel kann per Definition nicht null sein. Also nein, Sie können keinen Datensatz mit einem Nullwert laden. Sie müssen einen Weg finden, um zum Ladezeitpunkt einen eindeutigen Wert in dieses Feld einzugeben. Eine Konstante ist also keine Option, da sie aufgrund des Eindeutigkeitsfaktors eines Primärschlüssels nur für einen Datensatz funktioniert.

Dafür gibt es Optionen. Sie können eine Staging-Tabelle mit der gleichen Struktur wie das Ziel, aber ohne Primärschlüssel erstellen, zuerst in diese Tabelle laden und dann die gültigen Datensätze in die Tabelle übertragen und herausfinden, wie die fehlerhaften Zeilen später behandelt werden.

Wenn der Schlüssel numerisch ist, können Sie, solange Sie nicht die direkte SQL * Loader-Option verwenden, einen On-Insert-Trigger zu dieser Tabelle hinzufügen, der in diesem Feld nach einem Nullwert sucht und ihn setzt ein Wert, wenn es null ist. Dafür werden häufig Sequenzen verwendet, aber in Ihrer Instanz müssten Sie auf Kollisionen mit vorhandenen Schlüsselwerten testen (z. B. eine Sequenz erstellen, die in einem Bereich beginnt, der weit über dem Wert der Datenquelle liegt). Dies birgt jedoch das Risiko, dass zukünftige Kollisionen auftreten können, wenn das Quellsystem einen von Ihnen erstellten Schlüssel dupliziert und die Fähigkeit, einen Datensatz vom Ziel zurück auf die Quelle zurückzuführen, auf der Grundlage der ID verpasst.

+0

Danke ... Ich habe die Lösung. Ich habe das Schlüsselwort PRESERVE BLANKS in meine Kontrolldatei eingefügt und dann werden die Leerzeichen akzeptiert. –