2014-09-30 95 views
2

試圖創建作業但無法編譯它讓我給出這個錯誤。在oracle論壇上有一個問題,它說我必須創建程序來包裝它。是否有this?爲oracle創建DBMS_SCHEDULER作業

It gives me this Error

-- Created on 30.09.2014 by ALI.ORHAN 
    declare 
     -- Local variables here 
     i integer; 
    begin 
     -- Test statements here 
     dbms_scheduler.create_job(job_name  => 'blabla' 
           ,job_type  => 'STORED_PROCEDURE' 
           ,job_action  => 'dingdongprocedure;' 
           ,start_date  => '30-OCT-14 10.00.00 PM' 
           ,end_date  => '15-JULY-08' 
           ,repeat_interval => 'FREQ=WEEKLY BYDAY=TUE,FRI BYHOUR=10,13' 
           ,enable   => 'TRUE' 
           ,comments  => 'SUPREME COMMENT'); 
    end; 

我從PL/SQL開發人員創建UI作業後的任何解決辦法,我發現我的語法erorrs,新的代碼如下;

  1. 我使用sys.dbms_scheduler.create_job代替dbms_scheduler.create_job。我不瞭解差異,但這不是重要的改變。
  2. 我用to_date來定義start_date,作爲一個新手,我發現這個更好的做法。
  3. 重要我將job_class參數添加到'DBMS_JOB $'。 DBMS_JOB是Oracle RDBMS的作業類中的built_in。所以你會發現所有的作業與此查詢:

    select * from ALL_SCHEDULER_JOBS WHERE JOB_CLASS='DBMS_JOB$' 
    
  4. 重要我區間的錯了,你應該把;所有參數

  5. 之間像
    repeat_interval => freq=weekly;byhour=10, 13 
    
    我的第一份工作的代碼有我用另一種語法錯誤啓用代替啓用
  6. 我將auto_drop設置爲false。我想這個參數是用來放棄工作,當它完成他的工作。我的意思是,如果你創造了一項工作,每天從下到上進行更改。在結束時間後,這項工作已經下降。如果我錯了,請糾正我。

    sys.dbms_scheduler.create_job(job_name  => 'BOMBASTICJOB' 
             ,job_type  => 'STORED_PROCEDURE' 
             ,job_action  => 'dingdongprocedure' 
             ,start_date  => to_date('30-09-2014 00:00:00' 
                      , 'dd-mm-yyyy hh24:mi:ss') 
             ,end_date  => to_date(null) 
             ,job_class  => 'DBMS_JOB$' 
             ,repeat_interval => 'Freq=Weekly; ByDay=Tue, Fri; ByHour=10, 13' 
              ,enabled   => true 
              ,auto_drop  => false 
              ,comments   => ''); 
    

回答

3

我在12.1.0.1.0。你可以在一個簡單的匿名塊創建作業:

SQL> BEGIN 
    2 DBMS_SCHEDULER.DROP_JOB (JOB_NAME => 'test_full_job_definition'); 
    3 END; 
    4/

PL/SQL procedure successfully completed. 

SQL> 
SQL> BEGIN 
    2 DBMS_SCHEDULER.create_job (
    3  job_name  => 'test_full_job_definition', 
    4  job_type  => 'PLSQL_BLOCK', 
    5  job_action  => 'BEGIN my_job_procedure; END;', 
    6  start_date  => SYSTIMESTAMP, 
    7  repeat_interval => 'freq=hourly; byminute=0; bysecond=0;', 
    8  end_date  => NULL, 
    9  enabled   => TRUE, 
10  comments  => 'Job defined entirely by the CREATE JOB procedure.'); 
11 END; 
12/

PL/SQL procedure successfully completed. 

SQL> 
SQL> SELECT JOB_NAME, ENABLED FROM DBA_SCHEDULER_JOBS where job_name ='TEST_FULL_JOB_DEFINITION' 
    2/

JOB_NAME         ENABL 
---------------------------------------- ----- 
TEST_FULL_JOB_DEFINITION     TRUE 

SQL> 

更多的例子here

+0

我編輯我的答案。不需要匿名塊。我們可以通過工作來調用程序。 – 2014-09-30 08:39:11

+0

@AliArdaOrhan這是需要在匿名塊中創建的工作。作業本身不需要任何PL/SQL塊,它只是調度存儲過程。 – 2015-05-28 06:33:22