一.创建一个存储过程
1.注意:存储过程当中每条SQL必须以;分号符号结尾,否则创建任务引用存储过程是会报错,找不到存储过程
CREATE OR REPLACE PROCEDURE uoutbillstatus IS
BEGIN
UPDATE T_IO_OUT_BILL SET BILL_STATUS =2 WHERE CAR_NO LIKE '%15W%';
UPDATE T_IO_OUT_BILL SET BILL_STATUS =2 WHERE CAR_NO LIKE '鄂%';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');
ROLLBACK;
END;
二.创建定时任务
1.提交定时任务(任务名,存储过程名,第一次执行时间,下次执行时间(每30分钟执行一次))
"切记要提交事务""切记要提交事务"
2.提交完成了便会自动执行一次,最后一个时间会自动循环的
declare dsuoutbills number;
begin
dbms_job.submit(dsuoutbills,'uoutbillstatus;',SYSDATE,'sysdate+30/24/60');
COMMIT;
end;
3.最后一个参数 其他时间
interval => 'sysdate+1' --每天
interval => 'sysdate+1/24' --每小时
interval => 'sysdate+1/24/60' --每分钟
interval => 'sysdate+30/24/60/60' --每30秒
每天午夜12点 ''TRUNC(SYSDATE + 1)''
Interval => TRUNC(sysdate+1)+1/24 --每天凌晨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)''
三、查看任务状态
1.查看oracle中所有的定时任务
SELECT * FROM DBA_JOBS
2.停止任务
BEGIN
dbms_job.broken(1,true);-- 1 为任务的 JOB
END;
3.删除任务
begin
dbms_job.remove(1);--DBA_JOBS.job的值
end;