2016-11-16 53 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