Использовать параметры с CTL

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

sqlldr user/pwd@db data=my_data_file control=my_loader.ctl

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

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

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


person Hal    schedule 29.12.2010    source источник


Ответы (1)


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

Изменить: более конкретно.

мой_загрузчик.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$ — это текст, который будет заменен именем файла данных.

::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/pwd@db data=%1 control=my_loader_temp.ctl
::or with data be obmitted if you specified by infile in control file.
sqlldr user/pwd@db control=my_loader_temp.ctl

используя: dataload.bat mydatafile_2010_10_10.txt

person pinichi    schedule 29.12.2010
comment
Спасибо за Ваш ответ. Дело в том, что имя моего файла данных должно измениться от использования к другому (оно будет содержать дату дня, когда оно было сгенерировано, или что-то в этом роде), поэтому даже если использование переменной поможет, это не так. действительно то, что я ищу. - person Hal; 29.12.2010
comment
Извините, возможно, мой английский недостаточно хорош, но разве мое предложение не позволяет вам иметь my_loader_yymmdd.ctl для динамической загрузки в виде 1 столбца при каждой загрузке? - person pinichi; 29.12.2010
comment
Извините, возможно, я недостаточно ясно выразился. Меняется только имя файла данных, а не имя CTL. Я использую приведенную выше командную строку для запуска CTL, в которой я указываю имя файла данных и имя CTL. Я хотел бы получить имя файла данных внутри CTL, потому что я не хочу указывать его дважды, как в командной строке, так и в CTL. Что касается моих исследований, мне еще предстоит найти какое-либо решение этой проблемы. - person Hal; 29.12.2010
comment
Плохо, неправильно понял имя файла данных и имя файла управления, но идея все еще работает. Смотрите мой отредактированный ответ. - person pinichi; 29.12.2010