2016-07-01 10 views
0

Ich konnte die Daten der CSV-Datei mit Komma-Trennzeichen korrekt in die Oracle-Datenbank des Fensters laden, aber in der Linux-Umgebung wurde der Datensatz mit merkwürdigem Verhalten eingefügt. Zum Beispiel haben die Daten, die eingefügt werden, ein Verhalten wie \ n. i ausgewählt, um die Aufzeichnung und fügen Sie diesen Hinweis hin, dass die Platte wie dies SQL Loader kann CSV-Dateidaten nicht korrekt in Linux-Umgebung laden

"data 
" 

die Steuerdatei i wie unten ist

verwenden

ist
Load DATA 
REPLACE INTO TABLE TABLE_NM        
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 

bitte Rat, was ich tun kann, um dieses Szenario richtig zu machen. Vielen Dank im Voraus

+0

Geben Sie einige Zeilen mit Beispieldaten aus der CSV-Datei an. – JSapkota

+0

wahrscheinlich verwenden Sie das falsche Format. Neues Zeilenzeichen unterscheidet sich in Windows und Unix. Ändern Sie das Format und versuchen Sie es erneut. –

+0

@JSapkota die Beispieldaten sind wie folgt a, b, c, d a1, b2, c2, d2 a3, b3, c3, d3 das ist, was ich für die CSV-Datei erhalten, ist dies, wie es sieht aus wie wenn ich versuche, die Datei mit Notepad zu öffnen ++ – Jack

Antwort

0

Nach der Untersuchung stellen Sie fest, dass die Ursache der Probleme darin liegt, dass die Feeddatei nicht aus der Linux-Basisumgebung generiert wird. Nachdem ich die Datei manuell in die Linux-Version konvertiert habe, kann die Feed-Datei problemlos in die Datenbank geladen werden.

1

Es ist das klassische Problem, wo on * nix-Systemzeilen mit einem Zeilenvorschub enden, aber auf Windows-Zeilen enden mit einem Wagenrücklauf/Zeilenvorschub. Da Ihre Daten mit Wagenrücklauf/Zeilenvorschub enden, wird es unter Windows gelesen, aber Linux lädt den Wagenrücklauf.

Sie können entweder Vorprozess der Datendatei und ersetzen Sie die Zeile (Datensatz) Abschlusszeichen mit einem Dienstprogramm wie dos2unix oder die Steuerdatei ändern, indem Sie die STR Klausel zum INFILE Option, um den Rekord Abschlusszeichen an den Wagenrücklauf zu setzen:

INFILE "test.dat" "STR x'0D'" 

ich für den Betrieb der Daten durch dos2unix entscheiden würde die Steuerdatei allgemeineren und nicht Daten Dateinamen spezifisch zu halten.

+0

Ich habe nicht INFILE Befehl verwendet, wo sollte ich die STR x'OD 'Sache dann? – Jack

+0

Ich glaube, es erfordert den Befehl INFILE. –