Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sql-Loader – zweiter Enclosure-String nicht vorhanden

Wenn Ihr letztes Feld immer vorhanden ist (obwohl trailing nullcols schlägt vor, dass dies nicht der Fall ist) und Sie eine gewisse Kontrolle über die Formatierung haben, können Sie den CONTINUEIF Anweisung, die zweite Zeile als Teil desselben logischen Datensatzes zu behandeln.

Wenn die comments Feld immer vorhanden und in doppelte Anführungszeichen gesetzt ist, können Sie Folgendes tun:

...
truncate
continueif last != x'22'
into table ...

Welche würde Datensätze behandeln wie:

S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""

Oder wenn Sie immer ein Trennzeichen nach dem Kommentarfeld haben, egal ob es ausgefüllt ist oder nicht:

...
truncate
continueif last != ';'
into table ...

Welche würde handhaben:

S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;

Beide Wege laden die Daten als:

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N

Dadurch geht aber die neue Zeile aus den Daten verloren. Um dies beizubehalten, muss das abschließende Feldtrennzeichen vorhanden sein und anstelle von CONTINUEIF Sie können das Datensatztrennzeichen mit dem Stream-Datensatzformat ändern :

...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...

Der "str ';\n'" definiert das Abschlusszeichen als Kombination aus dem Feldabschlusszeichen und einem Zeilenumbruchzeichen. Ihr geteilter Kommentar enthält diese Kombination nur in der letzten Zeile. Mit derselben Datendatei wie in der vorherigen Version ergibt dies:

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
    new line

P N

4 rows selected.

Da Sie unter Windows arbeiten, müssen Sie möglicherweise \r einfügen auch im Format, z.B. "str ';\r\n'" , aber ich kann das nicht überprüfen.