2010-12-09 3 views
2

Привет, ребята, Мне интересно, как вы создаете планировщик заданий в Oracle APEX?dbms_job/Планировщик заданий Oracle

Я создаю систему, которая управляет вызовами, каждый вызов имеет уровень серьезности. Через час уровень серьезности должен быть увеличен. Я искал часы, и я предполагаю, что мне нужно сделать процедуру, которая определяет планировщик заданий, а затем запускает обновление?

Если вы, ребята, можете предложить мне какие-то предложения, я буду благодарен!

Приветствия Rich

ответ

3

На мой взгляд, самый простой из возможных решений, которые могли бы работать было бы что-то вроде

CREATE PROCEDURE escalate_cases 
AS 
BEGIN 
    UPDATE tickets 
    SET status = 'ESCALATED' 
    WHERE status = 'NOT ESCALATED' 
    AND open_date < sysdate - interval '1' hour; 
END escalate_cases; 

DECLARE 
    l_jobno PLS_INTEGER; 
BEGIN 
    dbms_job.submit( 
    l_jobno, 
    'BEGIN escalate_cases(); END;', 
    sysdate + interval '1' minute, 
    'sysdate + interval ''1'' minute' 
); 
    dbms_output.put_line('Job ' || l_jobno || ' submitted.'); 
    commit; 
END; 

Процедура обостряется все билеты, которые отвечают вашим критериям и анонимный блок создает работа, выполняющая процедуру каждую минуту. Одно задание, которое выполняется каждую минуту (или каждые несколько минут в зависимости от вашего допуска в течение долгого времени, которое вы можете ждать, чтобы увеличить билет) будет легче управлять, чем отдельное задание для каждого билета, которое выполняется ровно через 1 час после его отправки ,

Теперь, если вы хотите получить немного более сложный, пакет DBMS_SCHEDULER предлагает довольно много функциональности, которой нет в пакете DBMS_JOB. Он обеспечивает некоторую автоматическую регистрацию, обеспечивает возможность цепочки заданий, определять различные окна, в которых выполняются и не выполняются задания (т. Е. Если билет создается в 5:30, вы не можете его эскалировать в 6:30, потому что это послезавтра) и т. д. И DBMS_SCHEDULER - это направление, в котором движется Oracle. Но я все еще нахожусь с помощью DBMS_JOB для относительно простых задач, подобных этому.

+0

Приятной особенностью `DBMS_JOB` является то, что вы можете создать задание из триггера таблицы, если это ваш стиль :). Таким образом, вызывающий процесс просто вставляет билет, а триггер на таблице создает задание для его эскалации. – 2010-12-10 02:37:58

1

Я использовал метод, указанный Джастин с хорошим успехом. Другим способом, который хорошо работает, является использование очереди с задержкой доставки. Это дает вам возможность иметь внешнюю программу подкачки или что-то ждать в очереди для эскалации. Я не знаком с APEX, поэтому не уверен, что это хорошая идея в этом контексте.