Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Sqlldr- Nie znaleziono terminatora po zakończonym i zamkniętym polu

Poproszenie dostawcy o poprawienie pliku danych może nie być opcją, ale ostatecznie znalazłem rozwiązanie, które wymaga nieznacznej aktualizacji pliku kontrolnego, aby określić znak „ujęty przez” dla każdego pola zamiast dla wszystkich pól.

W moim przypadku wystąpił problem polegający na tym, że jeśli pole [first_name] pojawi się z podwójnymi cudzysłowami otaczającymi pseudonim, nie zostanie załadowane. (np. Jonathon „Jon”). W pliku danych nazwa była pokazana jako „Jonathon „Jon”” . Tak więc „zamknięty przez” generował błąd, ponieważ wokół wartości znajdowały się podwójne cudzysłowy i podwójne cudzysłowy wokół części wartości („Jon”). Więc zamiast określać, że wartość powinna być ujęta w podwójne cudzysłowy, pominąłem to i po prostu ręcznie usunąłem cudzysłowy z ciągu.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj nazwę miesiąca od daty w Oracle

  2. ORA-06530:Odniesienie do niezainicjowanego kompozytu

  3. Wydajność przeglądania Oracle z rownum

  4. Oracle — jak uzyskać rzeczywisty rozmiar konkretnego wiersza?

  5. Jaka jest alternatywa dla Find_in_set mysql w Oracle?