sql >> Database teknologi >  >> RDS >> Oracle

SQL loader - anden indkapslingsstreng findes ikke

Hvis dit sidste felt altid er til stede (dog trailing nullcols foreslår, at det ikke er det), og du har en vis kontrol over formateringen, kan du bruge CONTINUEIF direktiv om at behandle den anden linje som en del af den samme logiske post.

Hvis comments feltet er altid til stede og omgivet af dobbelte anførselstegn, så kan du gøre:

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

Som ville håndtere dataposter som:

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

Eller hvis du altid har et skilletegn efter kommentarfeltet, uanset om det er udfyldt eller ej:

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

Som ville klare:

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

Begge måder vil indlæse dataene som:

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

Men dette mister den nye linje fra dataene. For at bevare det skal du have den afsluttende feltafgrænser til stede og i stedet for CONTINUEIF du kan ændre postseparatoren ved at bruge stream record-formatet :

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

"str ';\n'" definerer terminatoren som kombinationen af ​​feltterminatoren og et ny linjetegn. Din opdelte kommentar har kun den kombination på den sidste linje. Med samme datafil som den tidligere version giver dette:

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

P N

4 rows selected.

Da du er på Windows, skal du muligvis inkludere \r også i formatet, f.eks. "str ';\r\n'" , men det kan jeg ikke kontrollere.



  1. MySql UUID duplikering BUG

  2. Opret dato fra år, måned og dag

  3. Oprettelse af et testmiljø fra et produktionslager

  4. Hvordan kan jeg indsætte data i MySQL-databasen?