2017-03-24 223 views
0

我知道,爲了安排對數據庫表的任何操作,我必須組成一個計劃鏈,即連接計劃的作業(DBMS_SCHEDULER.CREATE_JOB) DBMS_SCHEDULER.CREATE_SCHEDULE)和一個程序(DBMS_SCHEDULER.CREATE_PROGRAM)。但是如果我只想通過一個程序和一個鏈接的作業來完成同樣的任務呢?可能嗎 ?我已經試過,當我檢查程序日誌它顯示我:通過Oracle計劃任務執行Oracle計劃程序

RUNS  FAILS 
====================== 
    10  10 

這意味着,這項工作已經10次(運行在5秒的時間間隔)被處決,卻始終無法爲相同數量的的時代。

以下是有關JOB和程序代碼:

PROGRAM-CODE : 
================= 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_PROGRAM 
(
    program_name   => 'HR.INSERT_PROG' 
,program_type   => 'PLSQL_BLOCK' 
,program_action  => 'insert into sch_test values (s1.nextval,s2.nextval)' 
,number_of_arguments => 0 
,enabled    => TRUE 
,comments    => NULL 
); 
END; 


JOB-CODE : 
========== 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,schedule_name => 'HR.INSERT_SCH' 
    ,program_name => 'HR.INSERT_PROG' 
    ,comments  => NULL 
); 
END; 

有關表永遠不會被填充。如果有人能告訴我,我在這裏做錯了什麼?如果沒有附表,這難道不能實現嗎?

回答

2

您不必創建單獨的方案和時間安排,你可以把所有在一個作業是這樣的:

DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,start_date  => LOCALTIMETAMP 
    ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=5' 
    ,end_date  => NULL 
    ,job_class  => 'DEFAULT_JOB_CLASS' 
    ,job_type  => 'PLSQL_BLOCK' 
    ,job_action  => 'insert into sch_test values (s1.nextval,s2.nextval);' 
    ,enabled   => TRUE 
); 

命名時間表對象和命名的程序對象僅如果有幾個人跑有用在複雜的組合和依賴。

+0

是的,這已經完成並檢查,它的運行順利和罰款。但只是爲了好奇,我想知道是否可以用程序和工作來按照我的要求? 是的,謝謝你的答案兄弟! – hashir