Oracle
 sql >> Database >  >> RDS >> Oracle

Sqlldr- Nessun terminatore trovato dopo il campo terminato e racchiuso

Chiedere al provider di correggere il file di dati potrebbe non essere un'opzione, ma alla fine ho trovato una soluzione che richiede di aggiornare leggermente il file di controllo per specificare il carattere "racchiuso da" per ciascun campo anziché per tutti i campi.

Nel mio caso, ho riscontrato un problema per cui se il campo [first_name] fosse arrivato con virgolette che racchiudevano un soprannome, non sarebbe stato caricato. (ES:Jonathon "Jon"). Nel file di dati il ​​nome veniva mostrato come "Jonathon "Jon"" . Quindi "racchiuso da" generava un errore perché c'erano virgolette doppie attorno al valore e virgolette doppie attorno a parte del valore ("Jon"). Quindi, invece di specificare che il valore deve essere racchiuso tra virgolette, l'ho omesso e ho rimosso manualmente le virgolette dalla stringa.

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