sql >> Database >  >> RDS >> Oracle

Sql loader - tweede bijlagestring niet aanwezig

Als uw laatste veld altijd aanwezig is (hoewel trailing nullcols suggereert van niet) en u enige controle heeft over de opmaak, kunt u de CONTINUEIF instructie om de tweede regel te behandelen als onderdeel van hetzelfde logische record.

Als de comments veld altijd aanwezig is en tussen dubbele aanhalingstekens staat, dan kunt u het volgende doen:

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

Welke gegevensrecords zou verwerken zoals:

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

Of als u altijd een scheidingsteken heeft na het opmerkingenveld, of dit nu is ingevuld of niet:

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

Welke zou omgaan met:

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

Beide manieren laden de gegevens als:

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

Maar dit verliest de nieuwe regel uit de gegevens. Om dat te behouden, moet het scheidingsteken voor het afsluitende veld aanwezig zijn, en in plaats van CONTINUEIF u kunt het recordscheidingsteken wijzigen met behulp van het stream-recordformaat :

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

De "str ';\n'" definieert de terminator als de combinatie van de veldterminator en een nieuw regelteken. Uw gesplitste opmerking heeft alleen die combinatie op de laatste regel. Met hetzelfde gegevensbestand als de vorige versie geeft dit:

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

P N

4 rows selected.

Aangezien u Windows gebruikt, moet u mogelijk \r . opnemen ook in het formaat, b.v. "str ';\r\n'" , maar dat kan ik niet controleren.



  1. Selecteer Databasedetails en tabelnamen in iSQL plus

  2. Eenvoudige manier om kolommen en rijen in SQL te transponeren?

  3. Importeren met MySQL WorkBench... fout ERROR 1046 (3D000)

  4. Ongedefinieerde indexafbeelding in php