【发布时间】:2019-04-26 15:32:36
【问题描述】:
我有一个调用 pl/sql 包过程的计划作业。
目前,如果过程完成或超过基于配置表中设置的值的时间范围(作业执行时间范围为上午 12 点到凌晨 3 点),该过程将自行退出。
如果过程超出了允许执行的时间范围,我想使用 Oracle 调度程序功能干净地结束过程。 有没有办法做到这一点?
Oracle 12.2 版
【问题讨论】:
标签: oracle plsql scheduled-tasks
我有一个调用 pl/sql 包过程的计划作业。
目前,如果过程完成或超过基于配置表中设置的值的时间范围(作业执行时间范围为上午 12 点到凌晨 3 点),该过程将自行退出。
如果过程超出了允许执行的时间范围,我想使用 Oracle 调度程序功能干净地结束过程。 有没有办法做到这一点?
Oracle 12.2 版
【问题讨论】:
标签: oracle plsql scheduled-tasks
也许通过运行另一个作业来终止它?安排此作业在每天凌晨 3 点运行。 JOB_ACTION 看起来像
DECLARE
v_state user_scheduler_jobs.state%TYPE;
BEGIN
SELECT state
INTO v_state
FROM user_scheduler_jobs
WHERE job_name = 'MY_JOB_NAME';
IF v_state = 'RUNNING' THEN
DBMS_SCHEDULER.STOP_JOB(job_name=>'MY_JOB_NAME',force =>true);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('THE JOB MY_JOB_NAME IS NOT FOUND');
END;
/
【讨论】:
DBMS_SCHEDULER.CREATE_JOB 过程允许您为作业设置许多属性,包括max_run_duration。
https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHBCCJI
这是一个涵盖此问题的老问题:
【讨论】: