Oracle
 sql >> Base de données >  >> RDS >> Oracle

Sqlldr - Aucun terminateur trouvé après le champ terminé et fermé

Demander à votre fournisseur de corriger le fichier de données n'est peut-être pas une option, mais j'ai finalement trouvé une solution qui vous oblige à mettre à jour légèrement votre fichier de contrôle pour spécifier votre caractère "enfermé par" pour chaque champ au lieu de pour tous les champs.

Pour mon cas, j'ai eu un problème où si le champ [first_name] entrait avec des guillemets doubles enveloppant un surnom, il ne se chargeait pas. (Ex. :Jonathon "Jon"). Dans le fichier de données, le nom était "Jonathon "Jon"". Ainsi, le "entouré par" lançait une erreur car il y avait des guillemets doubles autour de la valeur et des guillemets doubles autour d'une partie de la valeur ("Jon"). Ainsi, au lieu de spécifier que la valeur doit être entourée de guillemets doubles, j'ai omis cela et j'ai simplement supprimé manuellement les guillemets de la chaîne.

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