Se o seu último campo estiver sempre presente (embora
trailing nullcols
sugere que não) e você tem algum controle sobre a formatação, pode usar o CONTINUEIF
diretiva para tratar a segunda linha como parte do mesmo registro lógico. Se os
comments
campo está sempre presente e entre aspas duplas, então você pode fazer:...
truncate
continueif last != x'22'
into table ...
Que lidaria com registros de dados como:
S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""
Ou se você sempre tiver um delimitador após o campo de comentários, seja ele preenchido ou não:
...
truncate
continueif last != ';'
into table ...
Que lidaria com:
S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;
Ambas as maneiras carregarão os dados como:
S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N
Mas isso perde a nova linha dos dados. Para manter isso, você precisa que o delimitador de campo final esteja presente e, em vez de
CONTINUEIF
você pode alterar o separador de registro usando o formato de registro de fluxo
:...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...
O
"str ';\n'"
define o terminador como a combinação do terminador de campo e um novo caractere de linha. Seu comentário dividido só tem essa combinação na linha final. Com o mesmo arquivo de dados da versão anterior, isso dá:S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
new line
P N
4 rows selected.
Como você está no Windows, talvez seja necessário incluir
\r
no formato também, e. "str ';\r\n'"
, mas não consigo verificar isso.