Oracle sqlldr NACHFOLGENDE NULLCOLS erforderlich, aber warum?
Habe ich eine abstruse sqlldr problem, das stört mich. Meine control Datei sieht ungefähr so aus:
load data
infile 'txgen.dat'
into table TRANSACTION_NEW
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS
( A,
B,
C,
D,
ID "ID_SEQ.NEXTVAL"
)
Daten ist so etwas wie dieses:
a,b,c,
a,b,,d
a,b,,
a,b,c,d
Wenn ich nicht setzen der NACHFOLGENDE NULLCOLS, bekomme ich die "Spalte nicht gefunden, bevor Ende des Datensatzes" - Fehler. Aber obwohl einige der Spalten null sind, die Kommas sind alle da, so sehe ich keinen Grund für sqlldr falsch interpretiert, die Eingabe-Datei, und nicht an das Ende, wo es generiert die ID aus der Datenbank-Sequenz.
Diese syntax gearbeitet hat, bevor Sie mit nicht-null-Spalten sind - warum ist eine null-Spalte verursachen, sqlldr, nicht erreichen, die generierte Spalte?
Ich habe es zu arbeiten, ich will nur verstehen, WARUM!?!
InformationsquelleAutor der Frage orbfish | 2010-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie definiert, 5 Felder in der control-Datei. Ihre Felder sind, abgeschlossen durch ein Komma, also brauchst du 5 Kommas in jedem Datensatz für die 5-Felder, es sei denn, NACHFOLGENDE NULLCOLS angegeben ist, auch wenn Sie laden Sie das ID-Feld mit einem Wert Sequenz über die SQL-Zeichenfolge.
RE: Kommentar von OP
Ist nicht meine Erfahrung mit einem kurzen test. Bei der folgenden Kontrolle Datei:
Produziert die folgende Ausgabe:
Beachten Sie, dass die einzige Zeile, die richtig geladen hatte 5 Kommas. Auch die 3. Reihe, mit allen Daten Werte vorhanden, außer ID, werden die Daten nicht geladen. Es sei denn, ich bin fehlt etwas...
Ich bin mit 10gR2.
InformationsquelleAutor der Antwort DCookie
Letzte Spalte in der input-Datei muss einige Daten (sei es Raum oder char, aber nicht null). Ich denke, 1. Datensatz enthält null " nach dem letzten ',' die sqlldr nicht erkennen, es sei denn ausdrücklich darum gebeten zu erkennen, die null-Werte mit TRAILING NULLCOLS option.
Alternativ, wenn Sie nicht möchten, verwenden Sie TRAILING NULLCOLS, müssen Sie achten Sie auf die Nullen, bevor Sie übergeben Sie die Datei auf sqlldr.
Hoffe, das hilft
InformationsquelleAutor der Antwort juzz4fun
Das problem hier ist, dass Sie definiert haben, die ID als Feld in der Datendatei, wenn das, was Sie wollen, ist nur ein Ausdruck verwendet wird, ohne irgendwelche Daten aus der Daten-Datei. Sie können dieses Problem beheben, durch die Definition von ID als einen Ausdruck (oder eine Sequenz, in diesem Fall)
oder
Finden Sie unter: http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1008234 für alle Optionen
InformationsquelleAutor der Antwort Chris
Versuchen Sie geben 5 ',' in jeder Zeile, ähnlich wie die Linie Nummer 4.
InformationsquelleAutor der Antwort ram
Hatte ich ähnliches Problem hatte, wenn ich viele zusätzliche Datensätze in der csv-Datei leere Werte. Wenn ich öffnen Sie die csv-Datei in notepad, dann leere Zeilen sieht wie folgt aus:
,,,,
,,,,
,,,,
,,,,
Können Sie nicht sehen, diese, wenn in Excel öffnen. Bitte prüfen Sie im Editor, und löschen Sie diejenigen Datensätze
InformationsquelleAutor der Antwort WizzArt