Sql-loader - zweite Gehäuse string nicht vorhanden
Ich bin laden ein .csv-Datei Daten in oracle-Tabelle über sql-loader. Eines der Felder hat eine neue-Zeile-Zeichen (CRLF) in seinen Daten und so, bin immer die folgende Fehlermeldung:
zweiten Gehäuse string nicht vorhanden
Dies ist meine control Datei
load data
characterset UTF8
infile 'C:\Users\lab.csv'
truncate
into table test_labinal
fields terminated by ";" optionally enclosed by '"'
TRAILING NULLCOLS
(
STATEMENT_STATUS ,
MANDATORY_TASK ,
COMMENTS CHAR(9999) "SubStr(:Comments, 0, 1000)"
)
Feld KOMMENTARE hat ein neue-Zeile-Zeichen in einer seiner Aufzeichnungen. Kann irgend jemand eine Lösung vorschlagen.
Dank
InformationsquelleAutor Vinod Chelladurai | 2014-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Ihre Letzte Feld ist immer vorhanden (obwohl
trailing nullcols
schlägt es nicht) und Sie haben eine gewisse Kontrolle über die Formatierung, die Sie verwenden können, dieCONTINUEIF
Richtlinie zur Behandlung der zweiten Zeile als Teil der gleichen logischen Datensatz.Wenn die
comments
Feld ist immer vorhanden und eingeschlossen in doppelten Anführungszeichen, dann können Sie tun:Denen umgehen würden, Datensätze wie:
Oder wenn Sie immer ein Trennzeichen nach dem Kommentarfeld, ob es gefüllt ist oder nicht:
Die das handhaben würde:
Beide Varianten laden Sie die Daten als:
Aber damit verliert die neue Zeile von Daten. Zu halten, müssen Sie das beenden-Feld-Trennzeichen vorhanden sein, und statt
CONTINUEIF
Sie können ändern Sie die Datensatz-Trennzeichen mit der stream-record-format:Den
"str ';\n'"
definiert terminator, der die Kombination von Feldabschlusszeichen und ein neue-Zeile-Zeichen. Ihre split-Kommentar hat nur diese Kombination auf die Letzte Zeile. Mit der gleichen Datei wie die Vorherige version, gibt es:Da bist du auf Windows müssen Sie möglicherweise gehören
\r
im format, wie z.B."str ';\r\n'"
, aber ich bin nicht in der Lage zu überprüfen.Alex, das sind meine Beispieldaten für 3 Spalten...................... aaaa 300 cav4VO;23.07.2010;280-VIN VALIDIERT;Nacharbeit getan wie verlangt (L928 91002 000 C2, Vers. 007)
kann Ihren Kommentar Werte (einschließlich null) immer in Anführungszeichen eingeschlossen werden oder ein terminator hinterher, und/oder in einer anderen Reihenfolge sein? Dass sample-Daten zu haben scheint 4 Spalten, aber das Kommentar-Feld scheint nicht alles, das würde Sie unterscheiden, ein split-Eintrag.
soweit ich Analysierte die Daten, das Feld "Kommentare" keine terminator hinterher und es ist nicht notwendig beigefügt werden Zitate immer....darüber hinaus haben wir diese .csv-Datei für entlang Zeit und ich bin gebeten worden zu laod diese sqlloader nur ver vor kurzem. Vielen Dank für Eure Hilfe
u verstanden, meine Antwort
InformationsquelleAutor Alex Poole
Hinweis: Die
CHR(13)
ist das ASCII-Zeichen für "carriage return" und dieCHR(10)
ist das ASCII-Zeichen für "neue Zeile". Mit dem Oracle-PL/SQLREPLACE
Befehl ohne einen Ersatz Wert entfernen "carriage return" und/oder "neue Zeile" - Zeichen, die eingebettet ist in Ihre Daten. Das ist wahrscheinlich der Fall, weil das Kommentar-Feld das Letzte Feld in der CSV-Datei.InformationsquelleAutor LaShawnda Walker
Können Sie
replace(replace(column_name, chr(10)), chr(13))
zu entfernen newline charactors oderregexp_replace(column_name, '\s+')
zu entfernen, nicht druckbare charactors während des be -InformationsquelleAutor San
Fand ich der beste Weg, zu laden .csv-Dateien mit Feldern mit newline und Komma.Bitte führen Sie das makro über die .csv-Datei und laden Sie dann mit sqlloader
Läuft es perfekt für mich.
InformationsquelleAutor Vinod Chelladurai