2012-05-22 54 views
3

我正在Oracle(11R2)DBMS調度程序中構建作業鏈。該鏈有兩個步驟。每個步驟都運行相同的程序,但具有不同的參數。我可以看到如何定義鏈,步驟,規則等 - 但我無法確定如何設置步驟的參數值。爲Oracle作業鏈中的某個步驟定義參數值

當我建立一個都是單調用程序,我這樣設置的參數工作:

dbms_scheduler.set_job_argument_value(
    job_name => 'MY_JOB', 
    argument_position => 1, 
    argument_value => 'foo'); 

我的問題是:哪個DBMS_SCHEDULER FUNC/proc中我會打電話來設置參數的作業步驟?使用下面的例子,如何爲'MY_CHAIN'中的'STEP_1'設置一個參數?

感謝, 約翰

DBMS_SCHEDULER.CREATE_CHAIN (
    chain_name => 'MY_CHAIN', 
    rule_set_name => NULL, 
    evaluation_interval => NULL, 
    comments => 'Chain calls 2 steps. Same program but with different arg values.'); 

DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
    chain_name => 'MY_CHAIN', 
    step_name => 'STEP_1', 
    program_name => 'MY_PROGRAM'); 

DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
    chain_name => 'MY_CHAIN', 
    step_name => 'STEP_2', 
    program_name => 'MY_PROGRAM'); 

DBMS_SCHEDULER.CREATE_JOB (
    job_name  => 'MY_CHAIN_JOB', 
    job_type  => 'CHAIN', 
    job_action  => 'MY_CHAIN', 
    repeat_interval => 'freq=daily;byhour=12;byminute=0;bysecond=0', 
    enabled   => TRUE); 
+0

更多的搜索出現後,我可以定義鏈中的步驟的參數。解決方法是將它們存儲在表中並從每個步驟中查找它們。我在這裏找到了這個答案:http://www.freelists.org/post/oracle-l/Passing-Arguments-to-Scheduler-Chains,1 – John

回答

1

我相信,你必須定義該兩個不同的程序,雖然他們當然可以參考同一個存儲過程或執行。

在前者的情況下,除非我要修改參數值,否則我傾向於使用匿名塊程序類型來指定存儲過程的參數 - 它足夠複雜,而無需添加所有該程序參數的內容。

相關問題