Файл управления 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 не найден

Есть ли у кого-нибудь идеи о том, как я могу справиться с этой проблемой?


person user960740    schedule 10.02.2012    source источник
comment
возможный дубликат загрузки нескольких csv в одну таблицу с помощью SQLLDR   -  person RandomSeed    schedule 13.08.2014


Ответы (3)


SQLLDR не распознает подстановочный знак. Единственный способ использовать несколько файлов, чтобы указать их явно. Вероятно, вы могли бы сделать это с помощью сценария оболочки.

person Adam Hawkes    schedule 10.02.2012
comment
Файлы нельзя перечислить явно, их тысячи. - person user960740; 10.02.2012
comment
Вот почему я предложил использовать сценарий оболочки. - person Adam Hawkes; 10.02.2012
comment
Используйте такой сценарий оболочки: filename="$(ls /home/user/file*.dat_*)"; for curr_filename in ${filename[@]} do sqlldr userid/password@oracle control=loader.ctl data=$curr_filename; done; - person Nitish; 23.05.2012

Ваше соглашение об именах файлов похоже на то, что вы можете объединить эти файлы в один, чтобы тот использовался управляющим файлом sqldr. Я не знаю, как вы можете объединить эти файлы в один файл в Unix, но в Windows я могу ввести эту команду

copy file*.dat* file.dat

Эта команда прочитает все содержимое файлов с именами, начинающимися с file и расширением dat, и поместит их в file.dat. файл.

person user2543390    schedule 02.07.2013

Я использовал эту опцию, и она отлично работает для загрузки нескольких файлов в одну таблицу.


-- Базовый управляющий файл 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
  ) 
person Kamran Umer    schedule 15.10.2014