【问题标题】:How to run batch file with parameter from DBMS_SCHEDULER chain job如何使用 DBMS_SCHEDULER 链作业中的参数运行批处理文件
【发布时间】:2017-03-30 17:05:34
【问题描述】:

案例:
我有 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 链作业的参数运行批处理文件?

【问题讨论】:

    标签: batch-file plsql oracle11g dbms-scheduler


    【解决方案1】:

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

    当然,批处理可以提供解决方案,可能合适也可能不合适。

    创建一个名为 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,但我想在这里使用参数的原因不是创建其他批处理文件。我想要一个带有 dbms_scheduler 作业传递参数的批处理文件。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多