使用工具:PL/SQL Developer 、SQL Developer
首先创建好存储过程—B_PROCEDURE
--创建job
variable B_JOB number; --B_JOB定义的变量,注意不要忘记
begin
dbms_job.submit(
:B_JOB, -- B_JOB前面定义的变量,注意前面有个“:”不可丢掉
'B_PROCEDURE;', --B_PROCEDURE为之前创建好的存储过程名字
sysdate, --下次执行时间
'sysdate+1/1440' --每次间隔时间,以天为单位,一天64800秒,1/1440 为间隔45s
);
commit;
end;
--查看job
select job,what,to_char(next_date,'yyyy-mm-dd hh24:mi:ss') as n_date,next_sec,
interval,broken,failures from user_jobs; --broken为N表示任务启动,broken为Y表示任务停止
--停止job
begin
dbms_job.broken(121, true, sysdate); --立即停止,121为job编号,根据上条查询出的job的值
commit;
end;
--重新运行job
begin
dbms_job.run(121); --121为job编号
commit;
end;
--修改定时任务时间
begin
dbms_job.change(121,null,null,'sysdate+3/1440');
commit;
end;
--删除JOB
begin
dbms_job.remove(121);
commit;
end;
一定要记得commit否则重启后会丢失
时间参考:
描述 | INTERVAL参数值 |
每天午夜12点 | 'TRUNC(SYSDATE + 1)' |
每天早上8点30分 | 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' |
每星期二中午12点 | 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' |
每个月第一天的午夜12点 | 'TRUNC(LAST_DAY(SYSDATE ) + 1)' |
每个季度最后一天的晚上11点 | 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' |
每星期六和日早上6点10分 | 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)' |