Oracle数据库创建定时删除任务

作者:Carl Zhang | 更新时间:2018-06-05 | 分类:科技

最近针对Oracle数据库中的某张表做了个定时删除的任务,过程比较坎坷,因此写这篇博客,以便以后的使用。

在oracle数据库中,其实有两个job,一个是单纯的job,还有一个是sched.jobs,其实就是schedule。从使用上来说,schedule会比job更好用,功能上也更强大,具体的区别大家可以度娘或者Google一下。

sql

再加上那会儿做的时候发现使用job好像权限不够,就只能用schedule了。废话少说,直接看代码(手机端无法显示代码片,请通过电脑端访问):

首先我们先创建一个存储过程:

--代码片作者:Carl Zhang,转载请注明。

create or replace procedure DeleteDataForJob as --DeleteDataForJob为这个存储过程的名字
begin
  delete from Table_Name where some_conditions; --some_conditions表示一些条件语句
end DeleteDataForJob;

创建完存储过程以后,创建scheduler的jobs:

--代码片作者:Carl Zhang,转载请注明。

begin
  DBMS_SCHEDULER.CREATE_JOB(
    job_name => 'deleteFreqEveryDaily', --对这个job起个名字
    job_type => 'STORED_PROCEDURE',     --针对上面的procedure,选用STORED_PROCEDURE
    job_action => 'DeleteDataForJob',   --这个job所要执行的存储过程名字
    start_date => to_date('05-06-2018 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
    Repeat_Interval => 'FREQ=DAILY; INTERVAL=1', --循环
    Enabled => True,
    Comments => '每天1点删除符合条件的数据'
  );
End;

这个是开始执行这个scheduler的sql语句:

--代码片作者:Carl Zhang,转载请注明。

exec dbms_scheduler.run_job('deleteFreqEveryDaily'); --启动job

这个是停止执行这个scheduler的sql语句:

--代码片作者:Carl Zhang,转载请注明。

exec dbms_scheduler.stop_job('deleteFreqEveryDaily'); --结束job

好了,这样一个定时删除任务就完成了。

其中,REPEAT_INTERVAL选项中的FREQ参数可以有下面这些:

YEARLY:以年单位
MONTHLY:以月单位
WEEKLY:以周单位
DAILY:以日单位
HOURLY:以小时单位
MINUTELY:以分单位
SECONDLY:以秒单位
INTERVAL:执行次数
BYMONTHDAY:月份中的日期
BYDAY:星期
BYHOUR:小时
BYMINUTE:分钟
BYSECOND:秒

(本文为作者原创。转载请注明:转自carlzhang.net






返回顶端