Правильно пропускать пустые поля с помощью sqlldr

Мне нужно загрузить разделенный вкладками файл в существующую таблицу Oracle. У некоторых записей есть пустые поля (не целые столбцы, как было отвечено раньше) в середине, и я не могу заставить sqllldr правильно загрузить поля, следующие за пустым для записи. Рассмотрим пример файла:

ID->   col1-> col2-> col3
rec1-> 1.28-> 2.56-> 5.12
rec2-> 1.28-> -> 
rec3->     ->     -> 5.12

и следующая загрузка контрольного файла.ctl:

OPTIONS (SKIP=1) 
load data  infile 'file.tab'
replace into table TARGET_TABLE
fields terminated by "t" optionally enclosed by '"'
TRAILING NULLCOLS
    (ID char terminated by "t",
     col1 terminated by "t",
     col2 terminated by "t",
     col3 terminated by "t")

приведет к следующей загрузке:

+------+------+------+------+
|ID    |col1  |col2  |col3  |
+------+------+------+------+
|rec1  |1.28  |2.56  |5.12  |
|rec2  |1.28  |(null)|(null)|
|rec3  |5.12  |(null)|(null)|

Пустые поля в загружаемом файле заполняются правильным количеством символов табуляции,но sqlldr, похоже, распознает последовательные вкладки как одну. Как я могу это предотвратить?
Спасибо за проверку моего вопроса новичка!

1 ответ

  1. Он не видит вкладку в качестве разделителя. Измените поле завершенная строка на:

    fields terminated by X'09' optionally enclosed by '"'
    

    и удалите «прекращено» \t «» из каждой записи столбца как его ненужные там.