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

Sqlldr- Nenhum terminador encontrado após o campo encerrado e incluído


Pedir ao seu provedor para corrigir o arquivo de dados pode não ser uma opção, mas finalmente encontrei uma solução que exige que você atualize ligeiramente seu arquivo de controle para especificar seu caractere "incluído por" para cada campo em vez de para todos os campos.

No meu caso, tive um problema em que, se o campo [first_name] viesse com aspas duplas envolvendo um apelido, ele não seria carregado. (EG:Jonathon "Jon"). No arquivo de dados o nome foi mostrado como "Jonathon "Jon"" . Portanto, o "incluído por" estava gerando um erro porque havia aspas duplas em torno do valor e aspas duplas em torno de parte do valor ("Jon"). Portanto, em vez de especificar que o valor deve ser colocado entre aspas duplas, omiti isso e apenas removi manualmente as aspas da string.
Load Data
APPEND
INTO TABLE MyDataTable
fields terminated by ","     ---- Noticed i omitted the "enclosed by"
TRAILING NULLCOLS
(
  column1 enclosed by '"',   --- Specified "enclosed by" here for all cols
  column2 enclosed by '"',
  FIRST_NAME "replace(substr(:FIRST_NAME,2, length(:FIRST_NAME)-2), chr(34) || chr(34), chr(34))", -- Omitted "enclosed by".  substr removes doublequotes, replace fixes double quotes showing up twice.  chr(34) is charcode for doublequote
  column4 enclosed by '"',
  column5 enclosed by '"'
)