DBMS SCHEDULER输入作业

时间:2013-08-19 20:38:39

标签: oracle stored-procedures plsql scheduled-tasks scheduler

嗨我在oracle中有一个存储过程,我想定期运行。首先,我得到了我的DBMS_SCHEDULER作业来编译(见下文),我甚至可以看到作业被创建并删除它虽然我没有看到存储过程的结果发生在它应该的表中实现并且存储过程已经过测试。

BEGIN                      
  DBMS_SCHEDULER.CREATE_JOB ( 
   job_name        => 'JOB_QUERY',
   job_type        => 'PLSQL_BLOCK',       -- see oracle documentation on types --
   job_action      => 'BEGIN RUNREPORT(''NAME'', ''VERSION'', ''04-Jun-13'', ''11-Jun-13''); END;',
   start_date      => to_date('2013-08-19 16:35:00', 'YYYY-MM-DD HH24:MI:SS' ),
   repeat_interval => 'FREQ=MINUTELY;BYMINUTE=10',    -- every 10 minutes.
   end_date        => NULL, 
   enabled         => TRUE,
   comments        => 'Daily Jira Query Update');
END;

我试图让它每十分钟运行一次,但我看不到任何变化。此外,我希望能够将SYSDATE或当前日期传递给dbms_scheduler作业中的过程,但我无法使用它来处理撇号。

由于

2 个答案:

答案 0 :(得分:1)

您必须COMMIT您的DML语句。 PL / SQL块中没有COMMIT,我想在程序RUNREPORT中也是如此。

你不需要在sysdate周围使用撇号,它不是字符串文字。

job_action      => 'BEGIN RUNREPORT(''NAME'', ''VERSION'', sysdate, ''11-Jun-13''); COMMIT; END;',

BYMINUTE并不代表您的期望。来自documentation: “这指定了作业运行的分钟。有效值为0到59.例如,45表示超过所选小时的45分钟”。你需要的是

repeat_interval => 'FREQ=MINUTELY;INTERVAL=10'

您可以通过查询user_scheduler_jobs来查看下一个运行日期等。

答案 1 :(得分:0)

如果您从DMBS预定作业调用存储过程,可以在下面尝试。

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
      JOB_NAME              => 'SCHEMA.MY_DBMS_SCHEDULED_JOB',
      JOB_TYPE              => 'STORED_PROCEDURE',
      JOB_ACTION            => 'SCHEMA.STORED_PROCEDURE_TO_BE_CALLED',
      START_DATE            => '01-AUG-13 12.00.00 AM',
      REPEAT_INTERVAL       => 'FREQ=DAILY;BYHOUR=0;BYMINUTE=10', 
      AUTO_DROP             => FALSE,
      ENABLED               => TRUE,
      NUMBER_OF_ARGUMENTS   => 0,
      COMMENTS              => 'Scheduled job to perform updates.');
END;
/

要查看您的日程安排日志是否可以使用以下查询。

SELECT * FROM all_SCHEDULER_JOB_LOG 
   where job_name='MY_DBMS_SCHEDULED_JOB' 
      order by log_id desc;