sql-loader - Dateien, die mit carriage return, line feed laden in oracle mit cr/lf
Habe ich Daten extrahieren von sql server, in dem Daten in den meisten Spalten sind carriage return und line feeds. Ich laden müssen Sie in oracle mit dem carriage return und line-feed; im Grunde habe ich zum spiegeln der Daten bilden, sql server 2012, oracle 11g.
unten ist das Beispiel meiner Datei extrahieren
[#BOR#][#EOC#]109[#EOC#]4[#EOC#]testdata_Duplicate[#EOC#]testdata_Duplicate aus dem chat[#EOC#]diese
ist
carriage return field[#EOC]test2[#EOR#]
Hier [#EOC#] ist die Spalte Trennzeichen, [#EOR#] ist die Zeile Trennzeichen. [#BOR#] zeigt den Anfang der Zeile. Zunächst meinen Lasten konnte nicht durch leere Zeilen in der flachen Datei(Daten entpacken). Dann habe ich [#BOR#] mit continueIf bewahren-Klausel, so dass sqlldr nicht behandeln leeren Zeilen(cr/lf) als physische Zeile.
mit [#BOR#] als Füllstoff Spalte mein laden funktioniert einwandfrei, aber carriage return oder line feed nicht geladen werden in oracle-Tabellen.
Meine ctl-Datei ist wie folgt
load data
truncate
CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
into table sch1.tbl1
fields terminated by '[#EOC#]'
trailing nullcols (
field filler,
a_id integer external,
h_id integer external,
title char(128),
descn char(4000),
risk char(4000),
comment char(4000) terminated by '[#EOR#]')
In oracle sch1.tbl1 Tabelle Spalte Risiko hat, Daten als 'dies ist carriage return Feld' statt
"diese
ist
carriage return field'
Habe ich versucht zu ersetzen, char(10) Zeichenfolge [#crlf#] und ersetzen-Funktion in ctl wie wie unten
load data
truncate
CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
into table sch1.tbl1
fields terminated by '[#EOC#]'
trailing nullcols (
field filler,
a_id integer external,
h_id integer external,
title char(128),
descn char(4000),
risk char(4000) "replace(:risk,[#crlf#],chr(10))"
comment char(4000) terminated by '[#EOR#]')
den sql-loader-Fehler aus, der besagt SQL*Loader-309: Keine SQL-string darf als Teil von Feld-Spezifikation; ich glaube, weil meine Spalten sind CLOB-Datentyp ich bin nicht in der Lage zu verwenden ersetzen-Funktion.
Bitte helfen Sie mir, zum laden von Daten aus sql server mit cr/lnFeed in oracle-Tabellen mit sqlloader. Vielen Dank im Voraus.
InformationsquelleAutor lvss | 2014-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Lösung, die für mich funktioniert.
Anstatt Sie zu ersetzen das carriage return/line feed(cr/lf) in der extrahierten flachen Datei mit [#crlf#] ich behalte mir das cr/lf in die extrahierten Daten der Datei.
Und dann änderte ich meine ctl-Datei zu behandeln, die cr/lf mit INFILE-Klausel mit Dateiname und " str '\n' ". Für Unix-env wir müssen \n", wobei für windows, können wir entweder \n oder \r\n".
siehe unten
Habe es getestet und die Daten geladen, die mit cr\lf.. muss ich tun, ausführlichere Tests, wie jetzt die ich getestet habe, eine Tabelle habe ich viele mehr.
Inzwischen, wenn jemand hat eine bessere Lösung wäre ich mehr als glücklich, um es auszuprobieren.
"STR 'EndOfRecord\n'"
verwendet werden kann in der control-Datei. Versuchen Sie dies bitte:LOAD DATA INFILE * "STR '[EOR]\n' INTO TABLE your_table APPEND FIELDS TERMINATED BY "[#EOC#]" TRAILING NULLCOLS ( ..., comment char(4000))
.InformationsquelleAutor lvss