首页 文章

为oracle创建DBMS_SCHEDULER作业

提问于
浏览
2

试图创造工作但是我必须创建程序来包装它 . this?有什么解决方法吗?

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 Developer UI创建作业后,我发现了我的语法错误,新代码如下;

  • 我使用sys.dbms_scheduler.create_job而不是dbms_scheduler.create_job . 我不是没有重要的改变 .

  • 我用to_date来定义start_date,作为一个新手,我发现了这个更好的做法 .

  • Important 我将job_class参数添加到'DBMS_JOB$' . DBMS_JOB是Oracle RDBMS的built_in作业类 . 所以你找到这个查询的所有工作:

select * from  ALL_SCHEDULER_JOBS WHERE JOB_CLASS='DBMS_JOB$'
  • Important 我应该把你的间隔弄错了;在所有参数之间
repeat_interval => freq=weekly;byhour=10, 13
  • 我的第一个工作代码有另一个语法错误我使用 enable 而不是 enabled .

  • 我设置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         => '');

1 回答

  • 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

相关问题