Om ditt sista fält alltid är närvarande (även om trailing nullcols
föreslår att det inte är det) och du har viss kontroll över formateringen kan du använda CONTINUEIF
direktiv för att behandla den andra raden som en del av samma logiska post.
Om comments
fältet är alltid närvarande och omges av dubbla citattecken så kan du göra:
...
truncate
continueif last != x'22'
into table ...
Som skulle hantera dataposter som:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Eller om du alltid har en avgränsare efter kommentarsfältet, oavsett om den är ifylld eller inte:
...
truncate
continueif last != ';'
into table ...
Som skulle hantera:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Båda sätten kommer att ladda data som:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Men detta förlorar den nya raden från data. För att behålla det måste du ha den avslutande fältavgränsaren närvarande, och istället för CONTINUEIF
du kan ändra postseparatorn med streampostformatet
:
...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
"str ';\n'"
definierar terminatorn som kombinationen av fältterminatorn och ett nyradstecken. Din delade kommentar har bara den kombinationen på sista raden. Med samma datafil som den tidigare versionen ger detta:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Eftersom du använder Windows kanske du måste inkludera \r
även i formatet, t.ex. "str ';\r\n'"
, men jag kan inte kontrollera det.