2010-12-09 44 views
2

Salut les gars, Je me demande comment vous créez un planificateur de travaux dans Oracle APEX?dbms_job/planificateur de travail Oracle

Je fais un système qui gère les appels, chaque appel a un niveau de gravité. Après une heure, le niveau de gravité devrait être augmenté. J'ai cherché pendant des heures, et je suppose que je dois faire une procédure qui définit un planificateur de travaux et exécute ensuite la mise à jour?

Si vous pouviez faire des suggestions à ma façon, j'apprécierais!

Vive Rich

Répondre

3

A mon avis, la solution la plus simple possible qui pourrait éventuellement travailler serait quelque chose comme

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; 

La procédure dégénère tous les billets qui répondent à vos critères et le bloc anonyme crée une travail qui exécute la procédure chaque minute. Un seul travail qui s'exécute toutes les minutes (ou toutes les quelques minutes en fonction de votre tolérance pendant une longue période) peut être plus facile à gérer qu'un travail séparé pour chaque ticket qui s'exécute exactement 1 heure après son envoi. . Maintenant, si vous voulez obtenir un peu plus sophistiqué, le paquet DBMS_SCHEDULER offre un peu de fonctionnalités que le paquet DBMS_JOB ne fait pas. Il fournit une fonction de journalisation automatique, il permet de chaîner des tâches, de définir différentes fenêtres où les tâches s'exécutent et ne s'exécutent pas (par exemple, si un ticket est créé à 5h30, vous ne voudrez peut-être pas l'escalader à 6h30 est après les heures), etc. Et DBMS_SCHEDULER est la direction dans laquelle Oracle se déplace. Mais je me trouve toujours en utilisant DBMS_JOB pour des tâches relativement simples comme celle-ci.

+0

Une fonctionnalité intéressante de 'DBMS_JOB' est que vous pouvez créer un travail à partir d'un déclencheur de table - si c'est votre style :). Ainsi, le processus appelant insère simplement le ticket, et un déclencheur sur la table crée un travail pour l'escalader. –

+0

Le fait que le travail doive ou non escalader tout ce qui répond à certains critères est une question à considérer. La procédure pourrait accepter l'ID de ticket en tant que paramètre, ce qui pourrait supprimer le besoin d'index spéciaux pour que les escalate_cases fonctionnent correctement. –

1

Vérifiez le matériau here

1

Je l'ai utilisé la méthode ci-Justin avec succès. Une autre méthode qui fonctionne bien consiste à utiliser une file d'attente avec remise différée. Cela vous donne la possibilité d'avoir un programme de pagination externe ou quelque chose d'attendre dans la file d'attente pour les escalades. Je ne suis pas très familier avec l'APEX, donc je ne suis pas sûr que ce soit une bonne idée dans ce contexte.