Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Sql loader - segunda string de gabinete não está presente


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.