zoukankan      html  css  js  c++  java
  • 【oracle】初学jobs

    含义:job是oracle的一种对象,可以理解为定时执行的程序
    目的:定时自动执行特定代码

    照猫画虎--创建job

    1、创建测试表JOB_TEST

     create table JOB_TEST(a date);

    2、创建存储过程往测试表插入数据

    create or replace procedure JOB_PRO_TEST as
       begin
       insert into JOB_TEST values(sysdate);
       end;
       /

    3、创建job,名称jobtest,作用每分钟执行一次存储过程

    variable jobtest number;
     begin
     dbms_job.submit(:jobtest,'JOB_PRO_TEST;',sysdate,'sysdate+1/1440',true);
     end;
     /

    另一:

    declare jobtest number;
    begin
            dbms_job.submit(
                     job =>jobtest ,
                     what=>'JOB_PRO_TEST;',
                     next_date => sysdate,
                     interval => 'sysdate+1/1440',
                     no_parse => true);
    end;
    /

    job创建完成就已经运行了,不是一定要使用run

    创建完成,job就开始工作了,自动插入,看看效果


    4、手动运行jobtest

     begin
     dbms_job.run(:jobtest);
     end;
     /

    5.删除jjobtest

      begin
      dbms_job.remove(:jobtest);
      end;
      /

    另一

    begin
       dbms_job.remove(jobnomuber);
    end;
    /
    jobnomuber为job号,通过查询可得
    拦路虎--问题
    问题一:

    解决:
    在pl/sql中,用variable声明job号名称,会抛出‘无效的sql语句’异常,采用declare关键字
    问题二:


    解决:
    采用这样的方式::jobtest,注意那个冒号,可能会抛出‘并非所有变量都已绑定’异常,解决的方式:去掉那个冒号
    问题三:
    run或者remove时如果使用名称
    例如
    :jobtest 可能会抛出‘并非所有变量都已绑定’的异常;
    去掉冒号直接用名称jobtest可能会抛出‘jobtest未被声明’


    解决:
    查询到你创建的job号,然后通过job号执行
    select * from user_jobs; 
    select job  from all_jobs;
    PlSqlDev操作job
    创建job
    1、选择job文件夹,右键

    2、点击新建

    3、对应填写完成,可以点击“查看SQL”查看sql语句,确定无误后,点击“应用”即创建完成
    4、此时,job文件夹下对应job创建完成,直接可见job号,右键可进行相关操作



    知其所以然--知识理解
    job 参数:是由Submit()过程返回的binary_ineger。工作号,唯一标识一个工作。
    what参数:是将被执行的PL/SQL代码块。
    next_date参数:指识何时将运行这个工作。
    interval参数:何时这个工作将被重执行的频度。
    no_parse参数:指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。

    描述 INTERVAL参数值,定义job的执行频率(有些有待验证)

    每天午夜12点:'TRUNC(SYSDATE + 1)'
    每天早上8点30分:'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
    每星期二中午12点:'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
    每个月第一天的午夜12点:'TRUNC(LAST_DAY(SYSDATE ) + 1)'
    每个季度最后一天的晚上11点:'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
    每星期六和日早上6点10分:'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
    每分钟执行:'TRUNC(sysdate,'mi') + 1/ (24*60)'或 'sysdate+1/1440'
    每天的凌晨1点执行:'TRUNC(sysdate) + 1 +1/ (24)'
    每周定时执行:每周一凌晨1点执行:'TRUNC(next_day(sysdate,'星期一'))+1/24'
    每月定时执行:每月1日凌晨1点执行:'TRUNC(LAST_DAY(SYSDATE))+1+1/24'
    每季度定时执行:每季度的第一天凌晨1点执行:'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24'
    每半年定时执行:每年7月1日和1月1日凌晨1点:'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24'
    每年定时执行:每年1月1日凌晨1点执行:'ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24'

    学习参考地址:
    http://blog.csdn.net/javaloveiphone/article/details/7947810
    http://blog.csdn.net/truexf/article/details/1536730
    http://blog.csdn.net/yzh54ak/article/details/5776130
  • 相关阅读:
    学WPF (1 of n)干啥都有第一次
    程序启动时显示Flash窗体(C#)
    对象序列化后直接获取byte[]的方法
    工程管理(1 of n): 建立用于管理代码开发的注释标记
    发现Visual Studio隐含的大礼包漂亮的Visual Studio图像库
    C# Hello World
    更人性化地控制用户输入(1 of n)
    快手导航 计算机软件网址导航 时空地图TimeGIS
    中国图书馆图书分类法(Chinese Library Classification CLC)的XML文档生成 时空地图TimeGIS
    快手软件 v2.5 发布 时空地图TimeGIS
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3268811.html
Copyright © 2011-2022 走看看