sql >> Databasteknik >  >> RDS >> Oracle

Sqlldr- Ingen terminator hittades efter avslutat och inneslutet fält

Att be din leverantör att korrigera datafilen kanske inte är ett alternativ, men jag hittade till slut en lösning som kräver att du uppdaterar din kontrollfil något för att ange ditt "omslutet av"-tecken för varje fält istället för för alla fält.

För mitt fall hade jag ett problem där om [first_name]-fältet kom in med dubbla citattecken som omsluter ett smeknamn så skulle det inte laddas. (T.ex.:Jonathan "Jon"). I datafilen visades namnet som "Jonathon "Jon"" . Så "omsluten av" kastade ett fel eftersom det fanns dubbla citattecken runt värdet och dubbla citattecken runt en del av värdet ("Jon"). Så istället för att ange att värdet ska omges av dubbla citattecken, utelämnade jag det och tog bara bort citattecken manuellt från strängen.

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


  1. CodeIgniter/PHP Active Record ökar inte ett heltal

  2. Varför Optimizern inte använder Buffer Pool Knowledge

  3. postgres in vagrant(ubuntu14.04)

  4. MySQL Workbench skaffa åtkomst för administration?