有个需求,就是天天从一个表中提取出特定数据,保存到另外一个表中。才疏学浅,最初想用Oracle的触发器能够实现,翻开课本以后才发现触发器不是用来干这个的。因而用Java的Quartz框架编写代码实现了这个需求。完成以后又想用数据库实现,翻了下课本,找了些教程,发现网上都是用PL/SQL DEV工具编写脚本实现的。个人电脑上只有Oracle SQL Developer工具,通过一阵折腾,最终也实现了。数据库
我的感受用SQL Developer的图形化工具能够很方便的实现建立存储过程,定时做业的任务。相比较于PL/SQL,这个的学习成本更低一些,不须要知道那么多的脚本命令。app
记录下步骤。框架
1.获取昨天一天的全部数据工具
select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');
2.将查询到的数据插入到对应的表中学习
insert into brsj_kms_distributeproblem ( pk_information ,problemno ,problemname ,productid ,partno ,createUser ,createTime ,dutygroup ,dutyuser ,batch ,problemtype ,emergencydegree ) select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');
这里特别说明一下,第一个括号后面没有values关键字,加上values关键字执行就会报错,错误的表达式。测试
3.测试上面的SQL语句无误后,开始建立存储过程spa
create procedure ScheduledTasks is begin insert into brsj_kms_distributeproblem ( pk_information ,problemno ,problemname ,productid ,partno ,createUser ,createTime ,dutygroup ,dutyuser ,batch ,problemtype ,emergencydegree ) select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd'); COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); ROLLBACK; END;
建立好了以后,刷新一下,在左侧的过程文件夹中就能够看到对应的过程名称,检查图标上是否有红叉,若是有,说明语句错误,从新检查哪里出错。若是没有错误,直接右击,选择运行,运行成功后,能够查看对应的表中是否成功插入了数据,须要注意的是要确保执行过程的SQL语句逻辑上是能产生数据的,例如查询昨日的全部记录,若是昨日没有数据产生,即使SQL语句无误也不会产生结果,因此须要提早添加一些测试数据,确保能看到结果。code
运行到这里,能看到新产生的数据,说明建立的过程是没有问题的,接下来就是如何天天让它运行一次的问题了。orm
4.定时执行存储过程blog
打开项目列表-->调度程序-->做业,右击新建做业。
打开编辑做业窗口后,就能够在这里设定参数了。
做业名随便起一个,已启用能够先不打勾,建立好后选择启用也能够的。
说明里能够加汉字作一些介绍。
做业类用默认的。
做业类型里面选择存储过程,方案选择默认,打开过程下拉框,就能够看到咱们以前建立好的存储过程,把它选上。
右边什么时候执行做业就是选择频率了,能够根据本身的需求选择执行一次仍是天天执行,重复时间间隔里面能够详细选择每一年、每个月、天天、每时等详细参数。选好以后会自动生成代码。
开始时间和结束时间也能够按本身的需求进行选择。
选好以后点击应用,做业就建立好了,若是刚才选择了已启用,这时候做业已经开始运行了。若是刚才没选启用,在建立好的做业上右击,选择启用,也会开始运行。
设置一个合理的运行频率和运行时间进行测试是否运行正确,无误以后再修改频率和时间为真正运行的频率和时间。至此,全部过程所有完成了。
网上用的都是PL/SQL里面建立Job,须要写一大堆命令,这个比较简单,图形化工具建立定时任务,不容易出错。我的感受Oracle的这个SQL Developer工具仍是很强大的,功能很丰富,不少东西均可以用图形界面建立出来。