如何在Oracle写作业

[复制链接]
查看11 | 回复2 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
请问如何写作业每天调用一次存储过程,这个存储过程有参数的,
希望大家给个答案,谢谢了
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
declare
li_jobno Number;
Begin
li_jobno Number;
--生成报表
--DBMS_JOB.SUBMIT(li,'deleteoldproduct(trunc(sysdate-3),sysdate,200);',SYSDATE,'TRUNC(SYSDATE + 1)');
--每天7:00
--DBMS_JOB.SUBMIT(li_jobno,'jls_sp_synchrodata_700;',SYSDATE,'TRUNC(SYSDATE + 1) + (7*60)/(24*60)');
--每半个小时
--DBMS_JOB.SUBMIT(li_jobno,'jls_sp_synchrodata_halfhour;',SYSDATE,'SYSDATE + 1/48');
dbms_job.submit(li,'everyday_statistics',sysdate,'trunc(sysdate +1) +(17*60+20)/(24*60)');
每天晚上22点半执行
DBMS_JOB.SUBMIT(lis,'auto_Ins_Del_back_info(trunc(sysdate-1));',TRUNC(SYSDATE + 1) + (22*60+30)/(24*60),'TRUNC(SYSDATE + 1) + (22*60+30)/(24*60)')
DBMS_JOB.SUBMIT(li_jobno,'deleteoldproduct(trunc(sysdate-4),sysdate,400);','TRUNC(SYSDATE + 1)','TRUNC(SYSDATE + 1)');
--return li_jobno;
End;
/*
让ORACLE定时执行某个任务:DBMS_JOB.SUBMIT
最后那一项可以参考如下:
每天午夜12点 'TRUNC(SYSDATE + 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&quot

, NEXT_DAY(SYSDATE, "SUNDAY&quot

)) + (6*60+10)/
(24*60)'
其中li_jobno是它的ID,可以通过这个ID停掉这个任务,最后想说的是不要执行多次,你可以在里面管理起来,发现已经运行了就不
SUBMIT
补充一下,省得你想了:
每天运行一次 'SYSDATE + 1'
每小时运行一次 'SYSDATE + 1/24'
每10分钟运行一次 'SYSDATE + 10/(60*24)'
每30秒运行一次 'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次 'SYSDATE + 7'
不再运行该任务并删除它 NULL
可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况:
select job,what,next_date,next_sec,failures,broken from user_jobs;
注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时,Oracle就将该job标志
为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新设置为not broken,或强制调用dbms_job.run
来重新执行它。
除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、
dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务
号。
*/
查看情況:
select job "(任务号)",
next_date "(下次执行日期) ",next_sec "(下次执行时间)" ,
failures "失败16次则自动终止",
broken "(终止标志,Y/N)" from user_jobs;
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
利用DBMS_JOB.SUBMIT这个过程,把你想定时调用的函数写在DBMS_JOB.SUBMIT的what参数中,当然你还需要考虑间隔时间,何时执行等细节问题.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行