zoukankan      html  css  js  c++  java
  • Oracle SQL Developer定制每天执行一次存储过程的计划任务

        有个需求,就是每天从一个表中提取出特定数据,保存到另一个表中。才疏学浅,最初想用Oracle的触发器可以实现,翻开课本之后才发现触发器不是用来干这个的。于是用Java的Quartz框架编写代码实现了这个需求。完成之后又想用数据库实现,翻了下课本,找了些教程,发现网上都是用PL/SQL DEV工具编写脚本实现的。我的电脑上只有Oracle SQL Developer工具,经过一阵折腾,最终也实现了。

        个人感觉用SQL Developer的图形化工具可以很方便的实现创建存储过程,定时作业的任务。相比较于PL/SQL,这个的学习成本更低一些,不需要知道那么多的脚本命令。

        记录下步骤。

    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语句无误后,开始创建存储过程

    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语句无误也不会产生结果,所以需要提前添加一些测试数据,确保能看到结果。

         运行到这里,能看到新产生的数据,说明创建的过程是没有问题的,接下来就是如何每天让它运行一次的问题了。

    4.定时执行存储过程

         打开项目列表-->调度程序-->作业,右击新建作业。

    打开编辑作业窗口后,就可以在这里设定参数了。

    作业名随便起一个,已启用可以先不打勾,创建好后选择启用也可以的。

    说明里可以加汉字做一些介绍。

    作业类用默认的。

    作业类型里面选择存储过程,方案选择默认,打开过程下拉框,就可以看到我们之前创建好的存储过程,把它选上。

    右边何时执行作业就是选择频率了,可以根据自己的需求选择执行一次还是每天执行,重复时间间隔里面可以详细选择每年、每月、每天、每时等详细参数。选好之后会自动生成代码。

    开始时间和结束时间也可以按自己的需求进行选择。

    选好之后点击应用,作业就创建好了,如果刚才选择了已启用,这时候作业已经开始运行了。如果刚才没选启用,在创建好的作业上右击,选择启用,也会开始运行。

    设置一个合理的运行频率和运行时间进行测试是否运行正确,无误之后再修改频率和时间为真正运行的频率和时间。至此,所有过程全部完成了。

    网上用的都是PL/SQL里面创建Job,需要写一大堆命令,这个比较简单,图形化工具创建定时任务,不容易出错。个人感觉Oracle的这个SQL Developer工具还是很强大的,功能很丰富,很多东西都可以用图形界面创建出来。

  • 相关阅读:
    浅析Linux计算机进程地址空间与内核装载ELF
    ExtAspNet学习利用AppBox框架快速创建项目(四)vs2010解决方案
    ExtAspNet学习利用AppBox框架快速创建项目(五)—完成项目含源代码
    ExtAspNet学习利用AppBox框架快速创建项目(一)
    新手第一帖——学习.NET
    java hibernate4 学习心得
    ExtAspNet学习利用AppBox框架快速创建项目(三)Subsonic工具配置
    ExtAspNet学习利用AppBox框架快速创建项目(二)创建Oralce数据库
    我的编程疑团java还是.net
    修改.htaccess实现301重定向
  • 原文地址:https://www.cnblogs.com/plumsq/p/7151579.html
Copyright © 2011-2022 走看看