2010-12-29 2 views
0

Я использую CTL-файл для загрузки данных, хранящихся в файле, в определенную таблицу в моей базе данных Oracle. В настоящее время я запустить файл загрузчика, используя следующую командную строку:Использовать параметры с CTL

sqlldr user/[email protected] data=my_data_file control=my_loader.ctl 

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

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

Любая помощь будет оценена!

ответ

0

Как я знаю, не имеет способа передать параметру переменную в ctrl.
Но вы можете использовать константу в ctl и модифицировать файл clt, чтобы изменить это постоянное значение (в содержимом файла ctl) для каждого времени загрузки.

Редактировать: более конкретно.

my_loader.ctl:

--options 
load data 
infile 'c:\$datfilename$' --this is optional, you can specify here or from command line 

into table mytable 
fields.... 
(
datafilename constant '$datfilename$', -- will be replace by real datafname each load 
datacol1 char(1), 
.... 
) 

dataload.bat: предположим, что $ datfilename $ текст будет заменить имя DataFile'S.

::sample copy 
copy my_loader.ctl my_loader_temp.ctl 

::replace the name of datafile (mainly the content to load into table's data column) 
findandreplace my_loader_temp.ctl "$datafilename$" "%1" 

::load 
sqlldr user/[email protected] data=%1 control=my_loader_temp.ctl 
::or with data be obmitted if you specified by infile in control file. 
sqlldr user/[email protected] control=my_loader_temp.ctl 

с помощью: dataload.bat mydatafile_2010_10_10.txt

+0

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

+0

Простите, может быть, мой английский недостаточно хорош, но разве мое предложение не позволяет вам загружать 'my_loader_yymmdd.ctl' динамически 1 столбцом за каждый раз, когда вы загружаете? – pinichi

+0

Извините, я, возможно, не был достаточно ясен. Изменяется только имя файла данных, а не имя CTL. Я использую приведенную выше командную строку для запуска CTL, в котором я указываю имя файла данных и имя CTL. Я хотел бы получить имя файла данных внутри CTL, потому что я не хочу указывать его дважды, как в командной строке, так и в CTL. Что касается моих исследований, мне еще предстоит найти решение этой проблемы. – Hal

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