2016-11-16 51 views
0

案例:
我有Windows批处理文件start.bat其做用extr_mode参数从外面通过一些操作:如何使用参数从DBMS_SCHEDULER链作业中运行批处理文件

rem settings 
    set extr_mode=%1 

rem the rest of the script 

当我打电话它从cmd使用ie: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

问题解决 - 感谢尖端@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作业的元素。

1

坦率地说,我不知道dbms-scheduler。

当然,批次可以提供一个解决方案,它可能适用也可能不适用。

创建一个新的一批名为startDAILY.bat含简单:

C:\工作\的start.bat DAILY

,改变你的设置

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

我怀疑你的代码行陈述为

number_of_arguments => 0,

我怀疑你可能能够改变这样说,number_of_arguments => 1,

,然后很好 - 也许是dbms-scheduler手册可以给出一个关于如何提供DAILY作为第一个参数提示,这样就可以使用您的原始代码。

哦顺便说一句 - 使用start作为批名不是一个好主意,因为START是一个批处理关键字。

+0

感谢您的回答@Magoo,但我想在这里使用参数的原因不是创建其他批处理文件。我想要一个带有由dbms_scheduler作业传递的参数的批处理文件。 – massko