今天改完了全部的bug,就想整个项目哪里有地方可以优化,哪里还存在需要补坑。
因为是统计周月数据,便想到了数据库定时Job任务创建。
在百度上,找到了一篇好文章,跟大家分享:http://langgufu.iteye.com/blog/1179235
另一篇文章是关于ORACLE时间间隔书写:https://blog.csdn.net/wangjiajiachengcheng/article/details/51335871
当然,过程中遇到了几个点,需要注意下:
1、我需要处理查询一个表的数据更新到另一张表数据,具体方法如下:https://blog.csdn.net/cyxinda/article/details/78254110
2、一般我们都调用存储过程,这里job声明时,显得代码简洁好看
一个简单例子:
该例子来源第一篇文章,亲自在数据库操作的,发现有点小错误,改正后贴在这里:
1、创建测试表
create table a(a date);
2、创建一个自定义存储过程
create or replace procedure test as
begin
insert into a values(sysdate);
end;
3、创建JOB
declare job1 number;
begin
dbms_job.submit(job1,'test;',sysdate,'sysdate+1/1440');----这里直接调用创建好的test存储过程
commit; ----避免在plsql中点击提交按钮
end;
4、运行JOB (步骤三成功后,job就已经开始执行了)
先查询定时任务job的id,sql语句:SELECT * FROM USER_JOBS或SELECT * FROM DBA_JOBS;
根据ID,运行定时job任务
begin
dbms_job.run(jobId);
commit;
end;
5、停止已启动的定时任务
begin
dbms_job.broken(25, true, sysdate);
commit;
end;
5、删除指定job
-----查询任务id,删除定时任务,
begin
dbms_job.remove(jobId);
commit;
end;
6、修改Job执行参数
修改要执行的操作Job:dbms_job.what(jobno, what);
修改下次执行时间:dbms_job.next_date(job, next_date);
修改间隔时间:dbms_job.interval(job, interval);
停止Job:dbms.broken(job, broken, nextdate);
启动Job:dbms_job.run(jobno);
注意点:复制粘贴代码在编译器内经常会不通过,所以建议遇到该类情况时,手写代码。
7、定制执行插入数据
7.1、每周五零点插入数据
declare
job_test number:=6;
begin
dbms_job.submit(job_test, 'insert into test(a, b, c)
values
(1, 1, 1, trunc(sysdate,'day')+5, trunc(sysdate, 'day')+11, ''a'', ''a'');', sysdate, 'trunc(next_day(sysdate, 6))+2/24');
commit;
end;
7.2、每天中午十二点查询上周五到本周四的数据并更新到表test
declare
job_test number:=10;
begin
dbms_job.submit(job_test, 'update test set total=(
select A from(
select (sum(a) + to_number(to_char(systimestamp, ''mi''))) as A
from table1
where
date between
trunc(sysdate, ''day'') - 2 and trunc(sysdate, ''day'') + 4));', sysdate, 'TRUNC(sysdate)+1+12/(24)');
commit;
end;