如何使用来自 DBMS_SCHEDULER 链作业的参数 运行 批处理文件
How to run batch file with parameter from DBMS_SCHEDULER chain job
案例:
我有 windows 批处理文件 start.bat
,它使用从外部传递的 extr_mode
参数执行一些操作:
rem settings
set extr_mode=%1
rem the rest of the script
当我从 cmd
调用它时使用 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
链作业参数的批处理文件?
坦率地说,我对 dbms-scheduler 一无所知。
自然batch可以提供解决方案,可能适合也可能不适合
创建一个名为 startDAILY.bat
的新批次,仅包含以下内容:
C:\Job\start.bat 每日
并更改您的设置
program_action => 'C:\Job\startDAILY.bat'
我对你的代码行表示怀疑
number_of_arguments => 0,
我怀疑您可以将其更改为 number_of_arguments => 1,
然后 - 也许 dbms-scheduler
手册可能会提示如何提供 DAILY
作为第一个参数,以便您可以使用原始代码。
哦顺便说一句 - 使用 start
作为批名称不是一个好主意,因为 START
是一个批关键字。
问题已解决 - 感谢@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 工作的其余部分。
案例:
我有 windows 批处理文件 start.bat
,它使用从外部传递的 extr_mode
参数执行一些操作:
rem settings
set extr_mode=%1
rem the rest of the script
当我从 cmd
调用它时使用 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
链作业参数的批处理文件?
坦率地说,我对 dbms-scheduler 一无所知。
自然batch可以提供解决方案,可能适合也可能不适合
创建一个名为 startDAILY.bat
的新批次,仅包含以下内容:
C:\Job\start.bat 每日
并更改您的设置
program_action => 'C:\Job\startDAILY.bat'
我对你的代码行表示怀疑
number_of_arguments => 0,
我怀疑您可以将其更改为 number_of_arguments => 1,
然后 - 也许 dbms-scheduler
手册可能会提示如何提供 DAILY
作为第一个参数,以便您可以使用原始代码。
哦顺便说一句 - 使用 start
作为批名称不是一个好主意,因为 START
是一个批关键字。
问题已解决 - 感谢@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 工作的其余部分。