Как запустить командный файл с параметром из задания цепочки DBMS_SCHEDULER

Случай:
У меня есть пакетный файл Windows start.bat, который выполняет некоторые операции с использованием параметра extr_mode, переданного извне:

rem settings
  set extr_mode=%1

rem the rest of the script

Когда я вызываю его из cmd, используя i.e.: start.bat DAILY, он работает нормально, и параметр передается.

Теперь я пытаюсь вызвать этот пакетный файл в программе задания цепочки DBMS_SCHEDULER:

begin
  sys.dbms_scheduler.create_program(program_name        => 'OUT_BAT',
                                    program_type        => 'EXECUTABLE',
                                    program_action      => 'C:\Job\start.bat DAILY',
                                    number_of_arguments => 0,
                                    enabled             => true,
                                    comments            => 'Out batch file');
end;
/

эта программа без параметра (program_action => 'C:\Job\start.bat') работает нормально, но когда я добавляю задание параметра, происходит сбой.
Я имею в виду, я проверяю dba_scheduler_job_run_details и для этого шага STATUS = SUCCEEDED, но в ADDITIONAL_INFO есть:

CHAIN_LOG_ID="490364", STEP_NAME="OUT", STANDARD_ERROR="The system cannot find the path specified.
The system cannot find the path specified."

Я не нашел конкретного ответа на свой вопрос, так можно ли запустить пакетный файл с параметром из задания цепочки DBMS_SCHEDULER?


person massko    schedule 16.11.2016    source источник


Ответы (2)


Честно говоря, я понятия не имею о dbms-scheduler.

Естественно, партия может обеспечить решение, которое может быть подходящим или неподходящим.

Создайте новый пакет с именем startDAILY.bat, содержащий просто это:

C:\Job\start.bat ЕЖЕДНЕВНО

и измените настройки

program_action      => 'C:\Job\startDAILY.bat'

Я с подозрением отношусь к вашей строке кода, в которой говорится

количество_аргументов => 0,

Я подозреваю, что вы сможете изменить это, сказав: number_of_arguments => 1,

а затем хорошо - возможно, руководство dbms-scheduler может дать подсказку о том, как указать DAILY в качестве первого аргумента, чтобы вы могли использовать свой исходный код.

О, кстати, использование start в качестве имени пакета не очень хорошая идея, поскольку START является ключевым словом пакета.

person Magoo    schedule 16.11.2016
comment
Спасибо за ваш ответ @Magoo, но причина, по которой я хочу использовать здесь параметр, заключается не в создании других пакетных файлов. Мне нужен был один пакетный файл с параметром, переданным заданием dbms_scheduler. - person massko; 16.11.2016

Проблема решена - спасибо за совет @Magoo,

Сначала мне нужно было создать program:

sys.dbms_scheduler.create_program(program_name          => 'OUT_BAT',
                                    program_type        => 'EXECUTABLE',
                                    program_action      => 'C:\OUT_start.bat',
                                    number_of_arguments => 1,
                                    enabled             => false,
                                    comments            => 'Out batch file');

затем определите program argument и включите программу:

sys.dbms_scheduler.define_program_argument(program_name          => 'OUT_BAT',
                                             argument_position   => 1,
                                             argument_name       => 'DAILY',
                                             argument_type       => 'varchar2',
                                             default_value       => 'DAILY');

sys.dbms_scheduler.enable(name => 'OUT_BAT');

затем, конечно, остальные элементы задания dbms_scheduler.

person massko    schedule 16.11.2016