扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
oracle job 时间每五分钟执行:
创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为斗门企业提供专业的成都网站设计、网站建设,斗门网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
begin
sys.dbms_job.submit(job = :job,
what = '一个存储过程;',
Interval =TRUNC(sysdate,'mi') + 5/ (24*60));
commit;
end;
其中:如果改成TRUNC(sysdate,'mi')+ 10/ (24*60) 就是每10分钟执行次。每秒钟执行次:Interval = sysdate+ 1/(24 * 60 * 60)。如果改成sysdate + 10/(24 *60 * 60)就是10秒钟执行次。
使用dbms_job.submit方法过程,这个过程有五个参数:job、what、next_date、interval与no_parse:
1、job参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。
2、what参数是将被执行的PL/SQL代码块,存储过程名称等。
3、next_date参数指识何时将运行这个工作。
4、interval参数何时这个工作将被重执行。
5、no_parse参数指示此工作在提交时或执行时是否应进行语法分析——true,默认值false。指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。
扩展资料:
1、每天定时执行
例如:每天的凌晨1点执行
Interval =TRUNC(sysdate) + 1 +1/ (24)
2、每周定时执行
例如:每周一凌晨1点执行:
Interval =TRUNC(next_day(sysdate,'星期一'))+1/24
3、每月定时执行
例如:每月1日凌晨1点执行:
Interval=TRUNC(LAST_DAY(SYSDATE))+1+1/24
4、每季度定时执行
例如每季度的第一天凌晨1点执行:
Interval =TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
参考资料来源:百度百科-Oracle系统
参考资料来源:百度百科-Oracle PL/SQL从入门到精通
将下面的存储过程名称换成实际的存储过程名称,就可以实现您要的功能的,
现为你写的,直接在pl/sql dev里面执行就行了,有啥问题再联系我。
上面一段是删除job,后面的是建立job,我写了判断语句,可以随意执行
参考oracle的 dbms_job包。
---------------------华丽丽的分割线----------------------------
DECLARE
i_count number;
job_num number;
BEGIN
select count(job) into i_count from user_jobs where upper(what)='存储过程名称;';
if i_count0 then
select job into job_num from user_jobs where upper(what)='存储过程名称;';
dbms_job.remove(job_num);
end if;
END;
/
commit;
DECLARE X NUMBER;
BEGIN
DBMS_JOB.SUBMIT
( job = X
,what = '存储过程名称;'
,next_date = to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss')
,interval = 'SYSDATE+1'
,no_parse = TRUE
);
END;
/
commit;
DECLARE
v_JobID NUMBER;
BEGIN CREATE_JOBS
-- 创建用户状态保护处理任务
-- 运行间隔时间5秒钟
BEGIN
SELECT JOB INTO v_JobID FROM USER_JOBS
WHERE UPPER(WHAT) = 'p_operator(2000);' AND ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_JobID := 0;
END;
IF v_JobID = 0 THEN
SYS.DBMS_JOB.SUBMIT(JOB = v_JobID,
WHAT = 'p_operator(2000);',
NEXT_DATE = SYSDATE,
INTERVAL = 'SYSDATE + (5 / 86400)');
ELSE
SYS.DBMS_JOB.CHANGE(JOB = v_JobID,
WHAT = 'p_operator(2000);',
NEXT_DATE = SYSDATE,
INTERVAL = 'SYSDATE + (5 / 86400)');
END IF;
COMMIT;
END CREATE_JOBS;
/
如果需要进行drop表 create 表 insert into 插入数据,那么p_operator存储过程里面操作,其中括号里面的1000是入参,如果你不需要参数,那么可以删除
Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。
那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例
上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下
**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作
查询结果如下
其中broken = N 表示该job已经生效
我们再来查看目标表中有没有定时插入数据
可以看到,定时一分钟插入了一条数据。
1、根据jobno,执行以下脚本可以停止job
再来查看定时任务是否停用成功
我们发现BROKEN=Y 说明定时任务已经停止成功了
BROKEN = N ,刚才的定时任务又启动了
下面总计了一些定时任务中常用的运行时间
在plsql develpoer 里, 贴入下列代码,点执行
DECLARE
job_no_ NUMBER;
BEGIN
DBMS_JOB.SUBMIT(job_no_,
'insert_Prod;', -- 一般会将 insert into 语句写到一个存储过程insert_Prod中
sysdate,
'TRUNC(sysdate)+1+2/24'); -- 2/24 每天凌晨2点
COMMIT;
END;
查询Oracle里的job
select
job,last_date,last_sec,next_sec,total_time,interval,what
from user_jobs
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流