Oracle SQL Developer定制天天执行一次存储过程的计划任务

    有个需求,就是天天从一个表中提取出特定数据,保存到另外一个表中。才疏学浅,最初想用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工具仍是很强大的,功能很丰富,不少东西均可以用图形界面建立出来。

相关文章
相关标签/搜索