DBMS_JOB / Oracle Job Scheduler
-
25-09-2019 - |
Pergunta
Ei pessoal, estou me perguntando como você cria um agendador de empregos no Oracle Apex?
Estou fazendo um sistema que gerencia chamadas, cada chamada tem um nível de gravidade. Depois de uma hora, o nível de gravidade deve ser escalado. Eu procurei por horas e acho que preciso fazer um procedimento que defina um agendador de emprego e depois executa a atualização?
Se vocês pudessem jogar algumas sugestões do meu jeito, eu apreciaria!
Saúde rico
Solução
Na minha opinião, a solução mais simples possível que poderia funcionar seria algo como
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;
O procedimento aumenta todos os ingressos que atendem aos seus critérios e o bloco anônimo cria um trabalho que executa o procedimento a cada minuto. Um único trabalho que dura a cada minuto (ou a cada poucos minutos, dependendo da sua tolerância por muito tempo, você pode esperar para aumentar um ingresso) será mais fácil de gerenciar do que um trabalho separado para cada bilhete que vai exatamente 1 hora após o envio .
Agora, se você deseja ficar um pouco mais sofisticado, o pacote dbms_scheduler oferece bastante funcionalidade que o pacote DBMS_JOB não. Ele fornece alguns registros automáticos, fornece a capacidade de encadear trabalhos, definir várias janelas onde os empregos fazem e não correm (ou seja, se um ingresso for criado às 5:30, você pode não querer escalá -lo às 6:30 porque é é depois de horas), etc. e dbms_scheduler é a direção que o Oracle está se movendo. Mas ainda me pego usando DBMS_JOB para tarefas relativamente simples como essa.
Outras dicas
Confira o material aqui
Eu usei o método listado por Justin com bom sucesso. Outro método que funciona bem é usar uma fila com entrega tardia. Isso oferece a capacidade de ter um programa de paginação externo ou algo que aguarde a fila por escalações. Não estou tão familiarizado com o Apex, então não tenho certeza se essa é uma boa ideia nesse contexto.