Контрольный файл 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
  ) 
Другие вопросы по тегам