Sql 每月自动运行存储过程

Sql 每月自动运行存储过程,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,您好,我使用的存储过程将尝试从指定日期(sysdate-30)删除数据 我想尝试在每个月初运行Oracle存储过程 我该怎么做 提前感谢,我的英语很抱歉最简单的方法就是使用DBMS\u作业包。例如,它将在每个月的第一个月的午夜开始,在每个月的第一个月的午夜运行您的\u过程,并将传入一个参数sysdate-30 DECLARE l_jobno PLS_INTEGER; BEGIN dbms_job.submit( l_jobno, 'BEGIN yo

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

我该怎么做


提前感谢,我的英语很抱歉

最简单的方法就是使用
DBMS\u作业
包。例如,它将在每个月的第一个月的午夜开始,在每个月的第一个月的午夜运行
您的\u过程
,并将传入一个参数
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\u调度器
包,如果您使用的是较新版本的Oracle,它是一个更新且更复杂的调度器。这可能比
DBMS\u作业
复杂得多,涉及面也大得多——不过,如果您的需求非常简单,那么较轻的
DBMS\u作业
可能更容易学习和理解。

小注:

Oracle建议您从DBMS_作业切换到Oracle调度程序

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;
/

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

我只熟悉SQL Server,所以我在谷歌上搜索了“Oracle等效的SQL Server代理”,发现:如果它真的与SQL Server代理相当,您可以使用将自动运行的计划设置作业。请检查Oracle文档中的
DBA\u作业