Oracle中的定时任务实例教程

 更新时间:2023年04月19日 10:33:14   作者:何以解忧,唯有..  
定时任务相信大家都不陌生,下面这篇文章主要给大家介绍了关于Oracle中定时任务的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、Oracle 中的定时任务的实例

1.1、创建一个测试表,只有一个 DATE 类型字段

CREATE TABLE TEST_A(TEST_ADD_DATA DATE);

1.2、创建一个自定义存储过程

CREATE OR REPLACE PROCEDURE TEST_PRO AS
BEGIN
    INSERT INTO TEST_A VALUES (SYSDATE);
END;

1.3、创建定时任务JOB

DECLARE
    jobno NUMBER;
BEGIN
    dbms_job.submit(
            jobno, --定时器ID,系统自动获得
            'TEST_PRO;', --what执行的过程名
            SYSDATE, --next_date,定时器开始执行的时间,这样写表示立即执行
            'TRUNC(sysdate,''mi'') + 1/ (24*60)' --interval,设置定时器执行的频率,这样写每隔1分钟执行一次
        );
    COMMIT;
END;

说明:

1、declare后面的 jobno 是一个数字类型,主要的用途是给定时器保存id,下面的job 引用此 jobno 。

2、job:输出变量,是此任务在任务队列中的编号;

3、what:执行的任务的名称及其输入参数;

4、next_date:任务执行的时间;

5、interval:任务执行的时间间隔。

1.4、运行JOB (1.3执行成功后,job就已经开始执行了)

select * from TEST_A;

1.5、关于JOB的查询操作

-- 查看调度任务
select * from user_jobs;

-- 查看正在执行的调度任务
select * from dba_jobs_running;

-- 查看执行完的调度任务
select * from dba_jobs;

job 的 id,此id不是随便填写的,而是执行select * from user_jobs;查询到定时任务名称对应的 id。

手动执行定时任务(下面的参数25需要根据本地查询的参数来确定)

BEGIN
    DBMS_JOB.RUN(25);
    COMMIT;
END;

停止已启动的定时任务

BEGIN
    DBMS_JOB.BROKEN(25,  TRUE,  SYSDATE);
    COMMIT;
END;

删除指定job

BEGIN
    DBMS_JOB.REMOVE(25);
    commit;
END;

1.6、常见的Interval 设置

描述                        INTERVAL参数值 
每天午夜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)
每秒钟执行次
 
Interval => sysdate + 1/(24 * 60 * 60)
 
如果改成sysdate + 10/(24 * 60 * 60)就是10秒钟执行次
 
每分钟执行 
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
 
如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分钟执行次
 
每天定时执行 
例如:每天的凌晨1点执行 
Interval => TRUNC(sysdate) + 1 +1/ (24)
 
每周定时执行 
例如:每周一凌晨1点执行 
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
 
每月定时执行 
例如:每月1日凌晨1点执行 
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
 
每季度定时执行 
例如每季度的第一天凌晨1点执行 
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
 
每半年定时执行 
例如:每年7月1日和1月1日凌晨1点 
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
 
每年定时执行 
例如:每年1月1日凌晨1点执行 
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

1.7、编写存储过程的格式样例

-- oracle存储过程格式
CREATE OR REPLACE PROCEDURE TEST_PRO_NAME AS
    declare countNum INT :=0;
    begin
        select count(*) into SM_USER from test2;
        if(countNum=0) then
            --delete from Table
            --INSERT INTO table (col1, col2, col3)
            --SELECT col1,col2,col3 FROM table WHERE condition;

            --业务完成写日志
        else
            --没有数据写日志
     end if;
        commit;
    Exception When Others Then
        rollback;

END TEST_PRO_NAME

补充:Oracle手动执行定时任务

Oracle数据库中的定时任务可以使用DBMS_SCHEDULER包来手动执行。下面是一个简单的步骤:

1.使用SYS或具有管理员权限的用户登录到Oracle数据库中。

2.打开SQL Plus或SQL Developer等工具。

3.连接到数据库,并输入以下命令以创建一个简单的定时任务:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'my_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN my_procedure(); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
    enabled         => TRUE,
    comments        => 'My new job'
  );
END;
/

在上面的命令中,我们创建了一个名为"my_job"的定时任务,它每小时重复执行一次,并在启用时运行PL/SQL块。

4.执行以下命令来手动运行定时任务:

BEGIN
  DBMS_SCHEDULER.RUN_JOB('my_job');
END;
/

在上面的命令中,我们手动运行名为"my_job"的定时任务。

请注意,如果你要手动执行的定时任务有任何依赖项,如数据库对象或作业链,则必须在手动运行之前确保这些依赖项已经准备就绪。

总结

到此这篇关于Oracle中的定时任务的文章就介绍到这了,更多相关Oracle定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • sqlplus 命令登录 Oracle数据库的多种方法

    sqlplus 命令登录 Oracle数据库的多种方法

    这篇文章主要介绍了sqlplus 命令登录 Oracle数据库的两种方法,方式一通过sql*plus 命令窗口,方式2:通过 cmd 窗口,每种方式给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • Oracle10g 安装方法

    Oracle10g 安装方法

    如果你是初学者,你有必要看看这篇文章。
    2009-06-06
  • 判定一个字符串是否为有效时间的函数

    判定一个字符串是否为有效时间的函数

    判定时间是否有效的函数,为有效时间则返回1,不是有效时间则返回0,需要的朋友可以参考下
    2014-07-07
  • Oracle查询sql错误信息的控制和定位

    Oracle查询sql错误信息的控制和定位

    今天小编就为大家分享一篇关于Oracle查询sql错误信息的控制和定位,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • PLSQL安装、汉化和激活的方法步骤实现

    PLSQL安装、汉化和激活的方法步骤实现

    这篇文章主要介绍了PLSQL安装、汉化和激活的方法步骤实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Oracle sysaux表空间异常增长的完美解决方法

    Oracle sysaux表空间异常增长的完美解决方法

    sysaux表空间会因为多种情况而增大,下面这篇文章主要给大家介绍了关于Oracle sysaux表空间异常增长的完美解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Oracle使用强制索引的方法与注意事项

    Oracle使用强制索引的方法与注意事项

    这篇文章主要给大家介绍了关于Oracle使用强制索引的方法与注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 使用PLSQL查看表属性乱码的解决方法

    使用PLSQL查看表属性乱码的解决方法

    PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等,今天用plsql想查看表的属性,看看各个字段的注释,可是打开一看,居然是乱码的,所以接下来本文给大家介绍了使用PLSQL查看表属性乱码的解决方法,需要的朋友可以参考下
    2024-03-03
  • Oracle数据库产重启服务和监听程序命令介绍

    Oracle数据库产重启服务和监听程序命令介绍

    大家好,本篇文章主要讲的是Oracle数据库产重启服务和监听程序命令介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • oracle中存储函数与存储过程的区别介绍

    oracle中存储函数与存储过程的区别介绍

    这篇文章主要介绍了oracle中存储函数与存储过程的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10

最新评论