dbms_job / планировщик заданий Oracle - PullRequest
2 голосов
/ 10 декабря 2010

Эй, ребята, мне интересно, как вы создаете планировщик заданий в Oracle APEX?

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

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

Cheers Rich

Ответы [ 3 ]

3 голосов
/ 10 декабря 2010

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

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 для относительно простых задач, подобных этой.

1 голос
/ 10 декабря 2010

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

1 голос
/ 10 декабря 2010

Проверьте материал здесь

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