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

Sqlldr:no se encontró ningún terminador después del campo terminado y cerrado

Pedirle a su proveedor que corrija el archivo de datos puede no ser una opción, pero finalmente encontré una solución que requiere que actualice ligeramente su archivo de control para especificar su carácter "encerrado por" para cada campo en lugar de para todos los campos.

En mi caso, tuve un problema en el que si el campo [first_name] aparecía con comillas dobles envolviendo un apodo, no se cargaba. (Por ejemplo:Jonathon "Jon"). En el archivo de datos, el nombre se mostraba como "Jonathon "Jon"". Entonces, "encerrado por" arrojaba un error porque había comillas dobles alrededor del valor y comillas dobles alrededor de parte del valor ("Jon"). Entonces, en lugar de especificar que el valor debe estar entre comillas dobles, lo omití y simplemente eliminé manualmente las comillas de la cadena.

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 '"'
)