日期:2014-05-16 浏览次数:20562 次
1、创建表
-- create table CREATE TABLE g_test(c_id NUMBER(28) PRIMARY KEY,c_date DATE);
?
2、创建序列
--create sequence CREATE SEQUENCE seq_test MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1 INCREMENT BY 1 NOCACHE;
?
3、创建存储过程
-- 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
-- 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
-- 停止job BEGIN dbms_scheduler.disable(NAME => 'Job_g_test_insert'); END; /
?
6、删除job
-- 删除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点