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
  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3268811.html
Copyright © 2011-2022 走看看