oracle job实例(转)
?
转?http://xurichusheng.iteye.com/blog/1328406
定时执行的job
1、创建表
Sql代码??
- --?create?table??
- CREATE?TABLE?g_test(c_id?NUMBER(28)?PRIMARY?KEY,c_date?DATE);??
?
2、创建序列
Sql代码??
- --create?sequence??
- CREATE?SEQUENCE?seq_test?MINVALUE?1?MAXVALUE?999999999999999999999999999???
- START?WITH?1?INCREMENT?BY?1?NOCACHE;??
?
3、创建存储过程
Sql代码??
- --?create?procedure??
- CREATE?OR?REPLACE?PROCEDURE?P_TEST?AS??
- ??V_SEQ?NUMBER(28);??
- BEGIN??
- ??SELECT?SEQ_TEST.NEXTVAL?INTO?V_SEQ?FROM?dual;??
- ??IF?V_SEQ?<=?999999999999999999999999999?THEN??
- ????INSERT?INTO?G_TEST?VALUES?(V_SEQ,?SYSDATE);??
- ??END?IF;??
- END?P_TEST;??
- /??
?
4、创建job
Sql代码??
- --?create?job??
- BEGIN??
- ?--?每一分钟执行一次存储过程?P_TEST??
- ?--?job_action?:?存储过程名??
- ?--?start_date?:?执行job时间/日期??
- ?--?repeat_interval?:?间隔时间??
- ?dbms_scheduler.create_job(job_name?=>?'Job_g_test_insert',??
- ???????????????????????????job_type?=>?'stored_procedure',??
- ???????????????????????????job_action?=>?'P_TEST',??
- ???????????????????????????start_date?=>?TRUNC(SYSDATE),??
- ???????????????????????????repeat_interval?=>?'sysdate+1/1440');??
- ?--启用job??
- ?--?name即为上面的job_name??
- ?dbms_scheduler.enable(NAME?=>?'Job_g_test_insert');??
- ?--?运行Job??
- ?dbms_scheduler.run_job(job_name?=>?'Job_g_test_insert',??
- ????????????????????????use_current_session?=>?FALSE);??
- END;??
- /??
?
到这一步后,就可以查询表 g_test,看到数据了。
?
5、停止job
Sql代码??
- --?停止job??
- BEGIN??
- ??dbms_scheduler.disable(NAME?=>?'Job_g_test_insert');??
- END;??
- /??
?
6、删除job
Sql代码??
- --?删除job??
- BEGIN??
- ??dbms_scheduler.drop_job(JOB_NAME?=>?'Job_g_test_insert');??
- END;??
- /??
?
?
repeat_interval 参数:
???? 1/24 :一小时
???? 1/1440 : 一分钟
???? 1/(3600*24) : 一秒钟
?????sysdate+1 : 每天运行一次
???? sysdate+1/24 : 每一小时运行一次
???? sysdate+1/1440 : 每一分钟运行一次
???? sysdate+1/(3600*24) : 每一秒钟运行一次
???? sysdate+7 : 每星期运行一次
?
以上时间间隔不能保证任务(job)的下一次运行在一个特定的时间,仅仅能够指定一个任务两次运行之间的时间间隔。
特定日期或时间的例子:
trunc(sysdate+1) : 每天午夜12点
trunc(sysdate+1)+(8*60+30)/(24*60) : 每天早上8:30
trunc(last_date(sysdate)+1) : 每个月第1天的午夜12点
next_day(trunc(sysdate),"tuesday"+12/24) : 每星期二中午12点