重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
oracle定时更新(JOBS)
创新互联提供成都做网站、成都网站建设、网页设计,成都品牌网站建设,广告投放平台等致力于企业网站建设与公司网站制作,十余年的网站开发和建站经验,助力企业信息化建设,成功案例突破近1000家,是您实现网站建设的好选择.
rm.pro_hrm_emp_info_job过程
需要每天都更新,所以先创建个procedure,再创建个job就可以实现定时更新
create or replace procedure rm.pro_hrm_emp_info_job is
zm
begin
update rm.hrm_emp_info
set ages = to_number(TRUNC(nvl((sysdate brith_date) / 365, 0))),
leng_serv = to_number(TRUNC(nvl((sysdate work_date) / 365, 0))),
ins_len_ser = to_number(TRUNC(nvl((sysdate ente_appe_date) / 365,
0)));
commit;
end pro_hrm_emp_info_job;
相应的`job
declare
jobno number;
begin
dbms_job.submit(jobno,’rm.pro_hrm_emp_info_job;’,trunc(sysdate),’trunc(sysdate)+1’);每天零点更新
commit;
end;
/
分解下job
dbms_job.submit(jobno, job号,由sys.jobseq生成
’rm.pro_hrm_emp_info_job;’, 要执行的procedure
trunc(sysdate), 下次要执行的时间
’trunc(sysdate)+1’); 每次间隔的时间,此处的1标识一天 也可1/1440每一分钟执行一次
查看
select * from sys.user_jobs;
其中创建的jobno(任务号)由sys.jobseq序列生成
主由packages中的sys.dbms_job执行
细节可以查看sys.dbms_job包内容。 ;
用job,具体用法:
declare
n_job binary_integer;
begin
dbms_job.submit(n_job, '你要执行的东西', sysdate, TRUNC(LAST_DAY(SYSDATE))+4+2/24);
end;
-- 每月4号执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+4+2/24');
-- 每分钟执行一次
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate,’mi’) + 1 / (24*60)');
-- 凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2点执行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2点
dbms_job.submit(n_job_01,'你调的东西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');
我感觉你应该是不知道怎么写每月和每年吧。其实很简单,把你下次时间的字符串拿出来看下就行。下面是代码。
DECLARE
I4 INTEGER;I5 INTEGER;
BEGIN
--每月5号中午12点
DBMS_JOB.SUBMIT(I4,'YOUR PROC;',SYSDATE,'TRUNC(SYSDATE, ''MM'') + 4 + 12 / 24');
--每年1月10号中午12点
DBMS_JOB.SUBMIT(I5,'YOUR PROC;',SYSDATE,'TRUNC(SYSDATE, 'Y') + 9 + 12 / 24');
COMMIT;
END;
通过plsql查看tables、views等文件夹,找到定时器对应的DBMS_Jobs文件夹。
在文件夹或者在已有的定时器上右键 new... 创建一个新的job(定时器)
输入红色选中的必输参数。What里面是一些存储过程,可以是一个或者多个。多个之间用分好;隔开,可以数据一下注释说明,格式“/*存过说明*/。点击应用即可保存。点击View SQL可以查看job对应的sql脚本。
如果想查看一些脚本,处理通过打开文件夹的方式,也可以使用更方便的sql语句进行查看。
SELECT * FROM dba_jobs;
注意,如果next_date是4000-1-1表示这个脚本已经是停止状态。
如果想查询某个存储过程对应的哪个job可以通过dba_jobs表中what字段根据条件查询查看job.
dba_jobs中的job字段对应的值就和DBMS_Jobs中对应的数字是一致的,可以对信息进行修改更新。
在web.xml配置一个servlet设置启动顺序优先级高些(说白了就是web服务启动时调用这个类)
servlet
servlet-namet1/servlet-name
servlet-classcom.base.test.T1/servlet-class
!-- 如果需要自动加载,加下面一句 --
load-on-startup1/load-on-startup
/servlet
在这个T1类中的初始化方法ini中写一个Timer类,按shcedule 定时去执行那个业务方法即可。