sql >> Base de Datos >  >> RDS >> Oracle

Cargador Sql:la segunda cadena de gabinete no está presente

Si su último campo siempre está presente (aunque trailing nullcols sugiere que no lo es) y tiene cierto control sobre el formato, puede usar CONTINUEIF directiva para tratar la segunda línea como parte del mismo registro lógico.

Si los comments el campo siempre está presente y entre comillas dobles, entonces puede hacer:

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

Que manejaría registros de datos como:

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

O si siempre tiene un delimitador después del campo de comentarios, ya sea que se complete o no:

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

Que manejaría:

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

Ambas formas cargarán los datos como:

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

Pero esto pierde la nueva línea de los datos. Para mantener eso, necesita que el delimitador de campo de terminación esté presente, y en lugar de CONTINUEIF puede cambiar el separador de registros utilizando el formato de registro de flujo :

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

El "str ';\n'" define el terminador como la combinación del terminador de campo y un carácter de nueva línea. Su comentario dividido solo tiene esa combinación en la línea final. Con el mismo archivo de datos que la versión anterior, esto da:

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

P N

4 rows selected.

Dado que está en Windows, es posible que deba incluir \r en el formato también, p. "str ';\r\n'" , pero no puedo verificar eso.