0

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

我怎样才能做到这一点 ?

提前谢谢,对不起我的英语

4

3 回答 3

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可能更容易学习和理解。

于 2012-10-16T03:16:53.460 回答
0

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

于 2013-03-07T06:14:09.533 回答
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;
/
于 2013-01-11T15:20:28.973 回答