Oracle19c中DBMS_SCHEDULER作业下一次启动时间查询与更新方法咨询
Oracle 19c DBMS_SCHEDULER 作业时间操作解答
一、获取作业下一次启动时间
直接查询scheduler系列视图的NEXT_RUN_DATE字段即可,普通用户可查USER_SCHEDULER_JOBS,有更高权限可查ALL_SCHEDULER_JOBS/DBA_SCHEDULER_JOBS,该字段为TIMESTAMP WITH TIME ZONE类型,存储作业最新的下一次预定执行时间。
示例代码:
-- 基础查询 SELECT job_name, next_run_date FROM user_scheduler_jobs WHERE job_name = '你的作业名称'; -- 转换为指定格式输出 SELECT job_name, TO_CHAR(next_run_date, 'DD.MM.YYYY HH24:MI:SS') next_run_time FROM user_scheduler_jobs WHERE job_name = 'YOUR_JOB_NAME';
二、更新作业下一次启动时间
支持该操作,使用DBMS_SCHEDULER.SET_ATTRIBUTE过程修改作业的NEXT_RUN_DATE属性即可,传入的字符串格式日期只要先通过TO_DATE转换为日期类型即可,支持从自定义表、自定义函数取值传入。
常用场景示例
- 直接传入指定格式日期字符串
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'YOUR_JOB_NAME', attribute => 'NEXT_RUN_DATE', value => TO_DATE('15.10.2024 14:30:00', 'DD.MM.YYYY HH24:MI:SS') ); END; /
- 从预配置表读取日期值传入
DECLARE v_next_run DATE; BEGIN SELECT run_datetime INTO v_next_run FROM your_job_config_table WHERE job_name = 'YOUR_JOB_NAME' AND ROWNUM = 1; DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'YOUR_JOB_NAME', attribute => 'NEXT_RUN_DATE', value => NVL(v_next_run, SYSDATE) ); END; /
- 从作业时机判定函数取值传入
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'YOUR_JOB_NAME', attribute => 'NEXT_RUN_DATE', value => get_job_next_run_time('YOUR_JOB_NAME') ); END; /
注意:修改
NEXT_RUN_DATE仅影响下一次作业执行时间,不会改动作业原有重复执行规则,本次修改的时间点执行完成后,作业会继续按照原有REPEAT_INTERVAL规则生成后续执行时间。如果需要永久调整作业执行周期,需要修改REPEAT_INTERVAL属性。
内容的提问来源于stack exchange,提问作者Николай Шевцов
相关产品推荐
相关产品推荐

