2010-06-27 3 views
0

Je crée un système de bibliothèque. Lorsqu'un livre est réservé, je souhaite qu'il revienne automatiquement à "Disponible" dans 3 jours si l'utilisateur réservé ne l'emprunte pas.Comment créer de manière dynamique un calendrier de travail dans un déclencheur?

Je peux créer un déclencheur au feu lorsque l'état est changé en « réservé » mais je suis perdu sur la création d'un emploi à se produire en 3 jours et changer le statut de retour à « Disponible »

Tous les commentaires, conseille et les conseils seront grandement appréciés :)

+3

Vous avez quelques réponses ci-dessous qui implémentent votre idée d'un processus qui modifie la valeur stockée de STATUS. Une autre approche consiste à stocker l'application reserved_on_date et à calculer la disponibilité, c'est-à-dire la disponibilité: = (sysdate - reserved_on_date)> 3. Cela élimine le problème d'un travail asynchrone et laisse l'application afficher le temps restant dans le fenêtre de réserve – dpbradley

+2

+1 à la réponse de dpbradley. Ou, au lieu d'avoir un statut "Disponible", ajoutez une colonne de date "available_on" que vous définissez à la date à laquelle le livre sera disponible. De cette façon, aucune donnée n'a besoin d'être mise à jour. –

Répondre

3

Vous devez d'abord créer une procédure pour mettre à jour la colonne comme vous le souhaitez, en prenant comme paramètre d'entrée l'ID du livre (ou tout autre chose comme PK).

Dans votre déclencheur, appelez la procédure de soumission du paquetage dbms_scheduler et définissez la date de début dans un délai de 3 jours, sans redondance, et exécutez la procédure précédemment définie avec le paramètre: new.bookid en entrée.

Une fois que la transaction a été validée plus tard, le travail sera soumis. Sinon, en cas d'annulation de la transaction, le travail sera également annulé.

Nicolas.

+1

Actuellement, DBMS_SCEDULER fait des validations implicites (contrairement à l'ancien DBMS_JOB). http://www.pythian.com/news/398/dbms_scheduler-and-implicit-commits/ –

+0

Intéressant, dans ce cas, il vaut mieux travailler dans DBMS_JOB. –

1

quelle langue codez-vous?

Généralement pour quelque chose comme ceci j'écris un travail de cron qui fonctionnerait périodiquement (une fois par jour avant les heures de bibliothèque?), Fais une requête pour voir tout ce qui a été réservé pendant plus de 3 jours.

+0

J'utilise C# pour l'interface graphique. Mais je veux un moyen de gérer cela complètement à travers la base de données. :) –

Questions connexes