Oracle SQL Loader разбивает данные на разные таблицы - PullRequest
5 голосов
/ 06 ноября 2010

У меня есть файл данных, который выглядит следующим образом:

    1            2          3        4             5            6    
FirstName1 | LastName1 | 4224423 | Address1 | PhoneNumber1 | 1/1/1980
FirstName2 | LastName2 | 4008933 | Address1 | PhoneNumber1 | 1/1/1980
FirstName3 | LastName3 | 2344327 | Address1 | PhoneNumber1 | 1/1/1980
FirstName4 | LastName4 | 5998943 | Address1 | PhoneNumber1 | 1/1/1980
FirstName5 | LastName5 | 9854531 | Address1 | PhoneNumber1 | 1/1/1980

В моей базе данных есть 2 таблицы, одна для PERSON и одна для ADDRESS , поэтому янеобходимо хранить столбцы 1,2,3 и 6 в PERSON, а столбцы 4 и 5 в ADDRESS.Все примеры, приведенные в документации по SQL Loader, касаются этого случая, но только для столбцов с фиксированным размером, и мой файл данных разделен по конвейеру (и разделение его на 2 различных файла данных не вариант).

Кто-нибудь знает, каксделать это?

Как всегда, помощь будет высоко ценится.

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

Другим вариантом может быть настройка файла как внешней таблицы , а затем запуск вставок, выбирающих нужные столбцы из внешней таблицы.

1 голос
/ 01 февраля 2015
options(skip=1)
load data
infile "csv file path"
insert into table person
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(1,2,3,6)

insert into table address
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(4,5)
0 голосов
/ 06 ноября 2010

Даже если SQLLoader не поддерживает это (я не уверен), ничто не мешает вам предварительно обработать его, скажем, awk, а затем загрузить.Например:

cat 1.dat | awk -F '|' '{print $1 $2 $3 $6}' > person.dat
cat 1.dat | awk -F '|' '{print $4 $5}' > address.dat
...