Oracle Job学习--两种不同Job使用区别

1.两种不同的Job

Oracle中有两种建立Job的方式:

1)建立user_job定时任务

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'proc_add_test;',  /*需要执行的存储过程名称或SQL语句*/  
        NEXT_DATE => sysdate+3/(24*60),  /*初次执行时间-下一个3分钟*/  
        INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分钟执行一次*/
      );  
  commit;
end;

执行之后可以通过:
select * from user_jobs;

 

 

2)通过调度器建立定时任务 

 

  begin

    sys.dbms_scheduler.create_job(job_name => 'job_name',
    job_type => 'PLSQL_BLOCK',
    job_action => 'declare
    PRM_ERRCODE number;
    PRM_ERRMSG varchar2(200);
    begin
    proc_add_test(PRM_ERRCODE,PRM_ERRMSG);
    end;',
    start_date => to_date('01-04-2021 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
    repeat_interval => 'Freq=Monthly;Interval=1',
    end_date => to_date(null),
    job_class => 'DEFAULT_JOB_CLASS',
    enabled => true,
    auto_drop => true,
    comments => '测试job');
  end;

2.两种Job定时任务的不同之处

1)两种Job都可以调用已有的存储过程进行定时执行。

2)删除方法不同

  a)  user_job

  begin
    /*删除自动执行的job*/
    dbms_job.remove(40);
  end;

  b)  调度器job

    begin
      sys.dbms_scheduler.drop_job('job_name'); ---job名称
    end;

3)重点 如果存储过程中用到了游标CURSOR只能用调度器Job进行执行,经过尝试user_job无法执行含有游标的存储过程

亲测,一开始用user_job执行存储过程,执行都是成功的,但是数据并没有落地。最后换了调度器Job才好使。

 

posted @ 2021-04-21 18:08  墨水不是水  阅读(599)  评论(0编辑  收藏  举报