Чисто завершите процедуру plsql, запущенную планировщиком Oracle - PullRequest
0 голосов
/ 26 апреля 2019

У меня запланированное задание, которое вызывает пакетную процедуру pl / sql.
В настоящее время процедура завершится сама по себе, если она завершится или превысит временной интервал, основанный на значениях, заданных в таблице конфигурации (диапазон времени выполнения задания с 12:00 до 3:00).

Я хотел бы использовать функции планировщика Oracle для чистого завершения процедуры, если она превышает временной диапазон, который ей разрешено выполнять. Есть ли в любом случае, чтобы сделать это?

Oracle Версия 12.2

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Может быть, запустив другую работу, чтобы прекратить ее?Запланируйте эту работу на 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;
/
0 голосов
/ 27 апреля 2019

Процедура DBMS_SCHEDULER.CREATE_JOB позволяет установить ряд свойств для задания, включая max_run_duration.

https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHBCCJI

Вот старый вопрос, который охватывает это:

https://dba.stackexchange.com/questions/21540/why-does-dbms-scheduler-max-run-duration-not-raise-event-job-over-max-dur

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...