zoukankan      html  css  js  c++  java
  • oracle job入门【原】

    oracle job入门

    准备工作

    先做一张学生表Table

    表STUDENT 

    create table STUDENT
    (
      id       INTEGER,
      name     VARCHAR2(100),
      age      INTEGER,
      crt_date DATE
    )

    准备一个存储过程Procedure

    存过PROC_INSERT_STUDENT , 该存过一直往表里插数据,是为了方便观测job执行效果.

    CREATE OR REPLACE PROCEDURE PROC_INSERT_STUDENT AS
      ID INTEGER;--id
    BEGIN
      SELECT COUNT(*) INTO ID FROM STUDENT;--根据行数生成id
      ID := ID + 1;-- id+1
      INSERT INTO STUDENT VALUES (ID, 'bobo', 18, SYSDATE);--插表
      DBMS_OUTPUT.PUT_LINE(ID);--打印
      COMMIT;--
    END;

    开始设置配置job

    oracle 10g开始引入了DBMS_SCHEDULE包,可以将job需要的各种资源模块化 ,  用于替代老旧的的DBMS_JOB包.

    方式一: 新版 DBMS_SCHEDULER.CREATE_JOB(...) 强烈建议

    --创建job,每周日的01:00:00执行存过STORED_PROCEDURE删除60天以前各表数据
    BEGIN
      SYS.DBMS_SCHEDULER.CREATE_JOB(
                                    --job名
                                    JOB_NAME => 'JOB_INSERT_STUDENT',
                                    --job类型:PLSQL_BLOCK , STORED_PROCEDURE , EXECUTABLE
                                    JOB_TYPE => 'STORED_PROCEDURE',
                                    --procedure名
                                    JOB_ACTION => 'PROC_INSERT_STUDENT',
                                    --开始时间
                                    START_DATE => TO_DATE(NULL),
                                    --频率(以下意为分钟一次,且在每分钟的01秒执行)
                                    REPEAT_INTERVAL => 'Freq=Minutely;Interval=1;BySecond=01',
                                    --结束时间
                                    END_DATE => TO_DATE(NULL),
                                    --job类
                                    JOB_CLASS => 'DEFAULT_JOB_CLASS',
                                    --创建后自动激活
                                    ENABLED => TRUE,
                                    --自动删除: 默认true,即当job执行完毕都到期是否直接删除job
                                    AUTO_DROP => FALSE,
                                    --注释
                                    COMMENTS => 'job说明-插数据到STUDENT表');
    END;
    /

    JOB_TYPE -job类型说明:

    • PLSQL_BLOCK : 用于执行oracle语句(这个不建议用)
    • STORED_PROCEDURE : 用于执行存过(建议使用,最常用)
    • EXECUTABLE : 用于执行某些程序脚本语句,如shell脚本.(偶尔)

    这种方式创建的job 在plsql的 jobs窗口可以很方便的查看/编辑

    dbms_scheduler介绍

    oracle使用DBMS_SCHEDULER调度作业

    方式二: 旧版 DBMS_JOB.SUBMIT(...) 不建议

    该方式最令人讨厌的地方在于 "频率配置" 晦涩难懂反人类.

    -- 声明job
    DECLARE
    myjob NUMBER;
    BEGIN
    DBMS_JOB.SUBMIT(myjob, -- 这个参数是out类型
    'PROC_INSERT_STUDENT;',
    SYSDATE,
    'SYSDATE+60/(24*60*60)' ); -- 每60秒一次(即每分钟一次)
    COMMIT;
    DBMS_OUTPUT.PUT_LINE(myjob); -- 输出 被赋值的 myjob 变量值
    END;
    

    查看job

    -- 查看刚建立的job id
    SELECT * FROM SYS.USER_JOBS

     管理job 

    -- 运行job
    BEGIN
      DBMS_JOB.RUN(173);
      COMMIT;
    END;
    
    -- 停止job
    BEGIN
      DBMS_JOB.BROKEN(173, TRUE);
      COMMIT;
    END;
    
    -- 删除job
    DECLARE
    BEGIN
      DBMS_JOB.REMOVE(173);
      COMMIT;
    END;

    特别声明,在设置每周频率的时候,中文环境要输"星期X",而英文环境要输"SUNDAY",如下

    declare
      job_id number;
    begin
      sys.dbms_job.submit(job_id, 'PROC_INSERT_STUDENT;', sysdate, 'NEXT_DAY(TRUNC(SYSDATE ), ''星期日'' ) + 12/24'); --马上运行,然后每分钟运行一次
    end;

    oracle job 使用

    oracle job 定时执行 存储过程

    总结:

    10g开始的新版DBMS_SCHEDULER.CREATE_JOB(...) 比 旧版DBMS_JOB.SUBMIT(...)强大灵活又易理解太多,如果不是版本太旧的原因,一定要用新版去管理job

  • 相关阅读:
    ASP.NET MVC5中的Model验证
    MVC方式显示数据(数据库)
    MVC方式显示数据(手动添加数据)
    EF数据Linq方式查询
    c# MVC方式文件上传
    调用BAPI创建病患主数据时的问题汇总[BAPI_PATIENT_CREATE]
    [代码]如何上载图片到SAP数据库并显示
    [代码]读取物料BOM行项目长文本[READ_TEXT]
    [问题解决]更新订单BOM中的Qty Var-Sz Item字段失败
    [代码]如何在ALV头中显示Logo图片-[REUSE_ALV_GRID_DISPLAY]
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/5228791.html
Copyright © 2011-2022 走看看