2017-01-17 2 views
0

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

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

и следующий upload.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, кажется, распознает последовательные вкладки как один. Как я могу это предотвратить? Спасибо, что посмотрели вопрос моего новичка!

ответ

0

Это не видит ТАБ как разделитель. Изменение полей прекращается строку:

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

и удалить «останавливали„\ т“,» с каждой записью столбца в его ненужными там.

Смежные вопросы