案例:
我有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
连锁工作的参数运行批处理文件?
答案 0 :(得分:1)
坦率地说,我不知道dbms-scheduler。
当然,批次可以提供解决方案,这可能适合也可能不适合。
创建一个名为startDAILY.bat
的新批处理,其中包含以下内容:
C:\ Job \ start.bat DAILY
并更改您的设置
program_action => 'C:\Job\startDAILY.bat'
我对你的代码行陈述
表示怀疑number_of_arguments => 0,
我怀疑你可以改变一下来说number_of_arguments => 1,
然后很好 - 或许dbms-scheduler
手册可能会提示如何提供DAILY
作为第一个参数,以便您可以使用原始代码。
哦BTW - 使用start
作为批处理名称并不是一个好主意,因为START
是批处理关键字。
答案 1 :(得分:0)
问题解决了 - 感谢提示@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 job的其余元素。