在web系统开发中,某些系统需要定时执行一些数据库操作。如定期删除数据,定期调用某个存储过程进行报表的统计信息处理等等操作。为了解决这个需求,可以参照如下的几个步骤晚上数据库的定时任务的操作。
1、创建需要定时执行的存储过程代码。
2、创建定时job任务。
可以参照如下例子:
CREATE OR REPLACE PROCEDURE drop_create_table
IS
str_sql varchar2(500);
v_count number;
BEGIN
select count(*) into v_count from user_tables where table_name='TABLENAME';
if v_count<>0 then
str_sql := 'drop table TABLENAME';
execute immediate str_sql;
end if;
str_sql := 'DYNAMIC SQL';
execute immediate str_sql;
EXCEPTION
when others then
null;
END drop_create_table;
--定时删除 每天凌晨执行一次的计划
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'drop_create_table;'
,next_date => to_date('26/09/2008 00:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'sysdate + 1'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
执行成功后,可以通过pl/sql客户端或者命令去验证执行是否成功
命令: select * from user_jobs
删除:dbms_jobs.remove('jobnum');
注意:时间如果设置一个未来时间,则第一次执行是再设置的时间点。往后累加间隔时间执行,如果设置的时间点未当前时间之前。则数据库会自动设置当前时间点为第一次执行时间。以当前时间点作为起始点执行。