如何使用来自 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 工作的其余部分。