项目中遇到一个给表中某个字段每天递增20的需求,用的是oracle数据库,遂想到用dbms_job来实现。
一、先创建递增20的存储过程( TEST_DSRW表num字段递增):
create or replace procedure proce_sum is
begin
update TEST_DSRW t set t.num=((select num from TEST_DSRW)+20);
commit;
end proce_sum;
二、创建job任务(每天0点执行一次):
DECLARE JOB NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
JOB=>JOB,
WHAT=>'proce_sum;',
NEXT_DATE=>sysdate,
INTERVAL=>'TRUNC(SYSDATE + 1)');
COMMIT;
END;
三、建好之后可查看job运行情况:
select job, next_date, next_sec, failures, broken from user_jobs;
停止任务:
begin
dbms_job.broken(23, true, sysdate);
commit;
end;
开始任务:
begin
dbms_job.run(23);
commit;
end;
删除任务:
begin
dbms_job.remove(23);
commit;
end;
四、关于job运行时间:
1.每分钟执行:
Interval => TRUNC(sysdate,
'mi'
) + 1/(24*60)
2.每天的凌晨1点执行:
Interval => TRUNC(sysdate) + 1 +1/(24)
3.每天固定时间运行,比如早上8:10分钟:
TRUNC(sysdate+1) + (8*60+10)/24*60