1

测试.bat

mkdir C:\Users\user\aaTEST2
javac Test.java
Rscript C:\Users\user\a.R

以上是我的bat文件。当我在窗口命令上键入执行 bat 文件时,它运行良好。但是当我执行 oracle 作业调度程序时,例如:

BEGIN

DBMS_SCHEDULER.CREATE_JOB(
   job_name             => 'TEST_JOB2',
   job_type             => 'EXECUTABLE',
   number_of_arguments  => 3,
   job_action           => 'C:\windows\system32\cmd.exe',
   auto_drop            => FALSE);


DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('TEST_JOB2',1,'/c');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('TEST_JOB2',2,'C:\Users\user\test.bat');
DBMS_SCHEDULER.ENABLE('TEST_JOB2');

END;

它在不执行 javac 和 Rscript 的情况下执行。只是只有 mkdir 有效。为什么?问题是什么?我的甲骨文版本 12.1.0.1.0。

4

1 回答 1

0

在创建作业之前使用下面的代码创建凭据

BEGIN
   DBMS_CREDENTIAL.CREATE_CREDENTIAL(
      CREDENTIAL_NAME  =>  'credintial',   ----- credintial name give by u
     USERNAME         =>  'dons',           ----- os username
     PASSWORD         =>  'password');    ----- os password
END;
/


BEGIN
        DBMS_SCHEDULER.CREATE_JOB 
          (JOB_NAME=>'loader_file',       --- job name 
          JOB_ACTION=>'/home/oracle/loader.sh',    --- executable file with path 
          JOB_TYPE=>'executable',        -----   job type
          NUMBER_OF_ARGUMENTS=>7,  --  parameters in numbers 
          ENABLED=>false,                   
          AUTO_DROP =>true,
          CREDENTIAL_NAME=>'credintial',   -- give credentials name which you have created before "credintial"
          COMMENTS=> 'loader_file scheduler ');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 1, ARGUMENT_VALUE => 'para 1');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 2, ARGUMENT_VALUE => 'para 2');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 3, ARGUMENT_VALUE => 'para 3');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 4, ARGUMENT_VALUE => 'para 4');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 5, ARGUMENT_VALUE => 'para 5');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 6, ARGUMENT_VALUE => 'para 6');
          DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME =>'loader_file', ARGUMENT_POSITION => 7, ARGUMENT_VALUE => 'para 7');
          DBMS_SCHEDULER.RUN_JOB('loader_file');
end;
/


begin 
DBMS_SCHEDULER.DROP_JOB('loader_file'); 
end;
/
于 2018-08-12T15:46:53.630 回答