ORACLE进阶(一)定时任务dbms_job
用plsql窗口下的dbms_job也可以新建job,但是我不推荐,一开始我也用工具创建,但因为很多时候,我没有plsql工具,只有sqlplus。
新建job定时执行:
declare
job number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => job, /*自动生成JOB_ID*/
WHAT => 'delete from test;', /*需要执行的存储过程名称或SQL语句*/
NEXT_DATE => trunc(sysdate)+(19/24), /*初次执行时间-立即执行*/
INTERVAL => 'trunc(sysdate)+3+(19/24)' /*每隔3天 19点执行一次*/
);
commit;
end;
/
查看定时任务:
select * from user_jobs where job in(65,66)
修改
begin
--间隔时间
dbms_job.interval(job,interval); /*job job的ID,interval: 计算下一次任务执行的时间表达式*/
dbms_job.next_date(job,next_date); /*job: job 的ID;nex_date:要修改后的计算下一次执行的时间表达式*/
dbms_job.what('newProcedures();'); /*newProcedures(); 要更改的新操作名称*/
commit;
end;
删除job的正确方法:
begin
dbms_job.remove(65);
end;
手动执行定时任务
begin
dbms_job.run(66);
end;
查看正在执行的定时任务
select * from dba_jobs_running
笔记
- truncate清表操作。WHAT => 'truncate table test;' 会报错,改成WHAT => 'begin execute immediate ''truncate table test''; end;'