sql >> Databasteknik >  >> RDS >> Oracle

SQL loader - andra höljesträngen finns inte

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.



  1. Infoga filinnehållet i MySQL-tabellens kolumn

  2. Hur man flyttar en markör 100 meter med koordinater

  3. Hur kontrollerar jag om radioknappen är markerad eller vald i jQuery?

  4. NodeJS Postgres-fel getaddriinfo ENOTFOUND