2016-07-26 4 views
0

Нужна быстрая помощь. У меня есть файл, который содержит огромные данные, разделенные на трубы. Я хочу загрузить каждую строку файла данных в столбец таблицы. Но каждая строка в файле данных имеет несколько труб. previoulsy во время загрузки данных Я загружался в несколько столбцов, используя pipe в качестве разделителя, используя ниже управляющий файл.Загрузка данных с использованием загрузчика sql

LOAD DATA 
INTO TABLE sc8157.tmp_analysis_01 
APPEND 
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS 
(
    ABD_ERRORMESSAGE, 
    ISSUE_NO CONSTANT 'FIT-33266_all' 
) 

Но теперь я хочу загрузить целую строку в одну колонку. Может ли кто-нибудь помочь мне написать запрос для файла управления? Спасибо заранее.

+2

Вы хотите, чтобы каждая строка в файле была другим столбцом в одной таблице? Сколько столбцов есть, и будет ли файл иметь одно значение для каждого столбца - или несколько строк данных? Упрощенный пример был бы полезен с небольшой таблицей и файлом (значение не должно быть огромным ...) –

+0

, возможно, попробуйте использовать вкладку в качестве разделителя (если в файле нет фактических вкладок), тогда вся строка должен сопоставляться с указанным единственным столбцом. Использование: поля, завершенные x'09 ' – tbone

ответ

0

Возможно, проще будет изменить разделитель в вашем входном файле. Вы должны иметь одинаковое количество параметров в вашем входном файле и в вашем файле CTL.

Если разделитель в вашем файле ввода и вашем CTL-файле отличается, вся строка будет вставлена ​​в один столбец.

+0

На самом деле вам не нужно иметь одинаковое количество полей в файле в виде полей в файле управления. В качестве доказательства я изменил управляющий файл, как указано в моем примере, чтобы поля были прерваны '|' так как единственное изменение затем выполнило загрузку с моим файлом данных из 4 столбцов. Загружается только столбец «cola». В противном случае условия FILLER, BOUNDFILLER и т. Д. Не будут работать. –

0

Просто скажите sqlldr, разделитель полей - это возврат каретки. В этом рабочем примере таблица «test» имеет 4 столбца. Файл test.dat также имеет 4 столбца с разделителями по столбцам. Sqlldr просто видит один столбец в данных, так как я сказал, что возврат каретки закончил поле. В управляющем файле указано только одно поле, которое соответствует имени столбца в таблице, так что там они вставили данные.

LOAD DATA 
infile "test.dat" 
TRUNCATE 
INTO TABLE test 
FIELDS TERMINATED BY x'0D' 
(cola char(1000) 
) 

О, и быть в курсе, что вы должны поставить размер поля, как это определено в таблице после «полукокса» в файле управления еще SQLLDR использует относительно небольшое значение по умолчанию значение (256?) И отбросит «слишком маленькое поле» или что-то вроде этой ошибки, которая заставит вас сходить с ума, пытаясь отследить. Я удивлен, что sqlldr автоматически не запрашивает системные таблицы, чтобы получить фактический размер столбца и использовать его. Возможно, есть веская причина. В любом случае, я отредактирую свой пример. Также у VARCHAR2 есть ограничение по размеру 4000 символов, поэтому вы сказали, что у вас огромная строка, с которой вы можете столкнуться с ограничениями по размеру.

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