初次使用Oracle存储过程,定时任务--记录
业务需求中需要每个小时从一个视图当中取数据至另一个表中
因此用到了存储过程+定时任务
思路:
1.使用存储过程将视图中的数据转存到指定表中
2.用定时任务触发存储过程,设置每隔一小时执行
存储过程
首先,什么是存储过程:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
那么我们这里实际上就是需要使用存储过程,先从视图中把数据转存到指定表
写这么一个sql完成数据的复制转移
使用方法: 直接编写sql语句,可以看下我这里说的Oracle怎么写存储过程的定时任务执行语句_oracle定时任务执行produce-CSDN博客
declare
job number;
begin
DBMS_JOB.SUBMIT(
JOB => job,
WHAT => 'PROC_PHD_DATA_HOURLY;',
NEXT_DATE => to_date('2024-12-26 15:00:00', 'YYYY-MM-DD HH24:MI:SS'),
INTERVAL => 'SYSDATE + 1/24'
);
commit;
end;
/
可能遇到的问题: 有可能你的存储过程在后续的使用中你发现无法执行,所以,可以提前测试一下
PLSQL中,可以右键单击你的存储过程,而后点击'TEST' 测试
走一遍你的存储过程(后面也可以通过定时任务直接手动执行一次看是否报错)
可参考: Oracle 存储过程测试 - 癫狂编程 - 博客园
定时任务
定时任务可以帮助我们自定义存储过程的执行时间
参考:
Oracle怎么写存储过程的定时任务执行语句_oracle定时任务执行produce-CSDN博客
需要注意的是,当next_date变成了4000/1/1 ,点击预览sql,发现broken被选中,失败次数=16
这是因为系统发现执行异常后,连续失败达16次后,会将next_date变成了4000/1/1,即不再让该JOB执行了,该JOB已被数据库认定为失效JOB。
这时候应该去先查看存储过程是否有问题,通过上面的TEST去debug
找到问题后编辑JOB,手动更改NEXT_DATE,手动执行一次,测试是否修改了bug