每个月自动运行存储过程

时间:2012-10-16 02:11:58

标签: sql oracle stored-procedures

您好我的存储过程将尝试从指定日期删除数据(sysdate - 30) 我想在每个月初尝试运行Oracle存储过程..

我该怎么做?

提前致谢,对不起我的英文

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用DBMS_JOB包。例如,这将在下个月的第一个午夜开始的每个月的午夜运行your_procedure并传递参数sysdate - 30

DECLARE 
  l_jobno PLS_INTEGER;
BEGIN
  dbms_job.submit( l_jobno,
                   'BEGIN your_procedure( sysdate - 30 ); END;',
                   add_months( trunc(sysdate,'MM'), 1 ),
                   q'{add_months( trunc(sysdate, 'MM'), 1 )}' );
  commit;
END;

您也可以使用DBMS_SCHEDULER包,这是一个更新,更复杂的调度程序,假设您使用的是更新版本的Oracle。这比DBMS_JOB更复杂,更复杂 - 如果您的要求非常简单,那么较轻的DBMS_JOB可能更容易学习和理解。

答案 1 :(得分:0)

小调:

Oracle建议您从DBMS_JOB切换到Oracle Scheduler。

BEGIN                      
  DBMS_SCHEDULER.CREATE_JOB ( 
   job_name        => 'your_job_name',
   job_type        => 'STORED_PROCEDURE',       -- see oracle documentation on types --
   job_action      => 'name of the procedure',
   start_date      => trunc(sysdate)+2/24,      -- every night @ 2 a.m.
   repeat_interval => 'FREQ=DAILY;BYHOUR=2',    -- daily @ 2 a.m.
   end_date        => NULL,
   enabled         => TRUE,
   comments        => 'your general comment');
END;
/

答案 2 :(得分:0)

你可以为它安排一个工作,你必须在工作中调用存储过程。所以你可以在每个月初运行存储过程..