Контрольный файл SQLLDR: загрузка нескольких файлов
Я пытаюсь загрузить несколько файлов данных в одну таблицу. Теперь сами файлы имеют следующий формат:
file_uniqueidentifier.dat_date
Мой контрольный файл выглядит так
LOAD DATA
INFILE '/home/user/file*.dat_*'
into TABLE NEWFILES
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
FIRSTNAME CHAR NULLIF (FIRSTNAME=BLANKS)
,LASTNAME CHAR NULLIF (LASTNAME=BLANKS)
)
Мой SQLLDR с другой стороны выглядит так
sqlldr control=loader.ctl, userid=user/pass@oracle, errors=99999,direct=true
Произошла ошибка: SQL*Loader-500 не может открыть файл (/home/user/file*.dat_*) SQL*Loader-553 файл не найден
У кого-нибудь есть идеи относительно того, как я могу решить эту проблему?
3 ответа
SQLLDR
не распознает подстановочный знак. Единственный способ заставить его использовать несколько файлов для явного перечисления их. Возможно, вы могли бы сделать это с помощью сценария оболочки.
Ваше соглашение об именовании файлов выглядит так, как будто вы можете объединить эти файлы в один, создавая тот, который используется управляющим файлом sqlldr. Я не знаю, как вы можете объединить эти файлы в один файл в Unix, но в Windows я могу выполнить эту команду
copy file*.dat* file.dat
Эта команда будет читать все содержимое файлов с именами, которые начинаются с файла и расширением dat и помещаются в файл file.dat.
Я использовал эту опцию, и она отлично работает для загрузки нескольких файлов в одну таблицу.
- Базовый управляющий файл SQL-Loader
options ( skip=1 )
load data
infile 'F:\oracle\dbHome\BIN\sqlloader\multi_file_insert\dept1.csv'
infile 'F:\oracle\dbHome\BIN\sqlloader\multi_file_insert\dept2.csv'
truncate into table scott.dept2
fields terminated by ","
optionally enclosed by '"'
( DEPTNO
, DNAME
, LOC
, entdate
)