0

嗨,我在 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 作业中的过程,但我无法让它与撇号一起使用。

谢谢

4

2 回答 2

1

你必须对COMMIT你的 DML 语句。PL/SQL 块中没有COMMIT,我猜在过程RUNREPORT中也没有。

您不需要 sysdate 周围的撇号,它不是字符串文字。

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

BYMINUTE并不意味着你所期望的。来自文档:“这指定了作业要运行的分钟。有效值为 0 到 59。例如,45 表示所选小时后 45 分钟”。你需要的是

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

您可以通过查询来检查下一次运行日期等user_scheduler_jobs

于 2013-08-19T21:47:11.753 回答
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;
于 2013-10-02T05:18:00.303 回答