2010-11-16 16 views
2

Je dois effacer tous les enregistrements d'une table si les données existent depuis une heure. pour connaître l'heure de début, j'ai une colonne "StartTime" avec le type de données "date". Je pense que j'ai besoin d'une minuterie pour le faire,comment exécuter la procédure avec timer dans Oracle

comment puis-je faire cela dans Oracle?

Répondre

1

Les exigences ne sont pas très claires.

Est-ce un travail/programme que vous devez exécuter une fois et qui supprimera les enregistrements qui existaient depuis plus d'une heure? Si tel est le cas, vous pouvez utiliser ..

delete from <table_name> 
where StartTime < (sysdate-1/24); 
commit; 

Si vous devez purger les enregistrements en permanence, vous aurez besoin de planifier cela comme un emploi. La fréquence dépendra de la fréquence à laquelle vous souhaitez que les enregistrements soient supprimés.

Quelle est l'analyse de rentabilisation que vous essayez de résoudre?

4

Pour quelle version d'Oracle?

Pour les versions v7.3.4 à 9i, utilisez DBMS_JOB pour planifier une tâche. 10g +, vous voulez utiliser DBMS_SCHEDULER. Ce n'est pas clair pour moi combien de fois vous voulez/besoin que cela fonctionne ...

3

Vous pouvez créer des travaux programmés dans Oracle 10G et au-dessus en utilisant la DBMS_SCHEDULER

Si vous êtes vraiment pointilleux, vous pouvez planifier ce travail - qui appelle votre procédure - à exécuter toutes les 1 minute pour que les données sont effacées à dès que la 60e minute expire.

Référez-this link pour un exemple de la façon de configurer/planifier un travail via des scripts dans Oracle 10G

6

En fonction de vos besoins exacts, je chercherais probablement à l'aide d'une vue de ne montrer que les lignes valides lors d'une interrogation . Cela donnerait l'impression que seule la dernière heure des enregistrements était disponible. Cela signifie également que vous n'avez pas besoin de supprimer des lignes exactement une heure après leur création. Puis, pour supprimer les lignes, je voudrais utiliser DBMS_JOB ou DBMS_SCHEDULER pour supprimer les lignes comme cela a été suggéré dans certaines des autres réponses. Rappelez-vous que, tout simplement parce que vous avez besoin d'effacer les lignes de la table au bout d'une heure, vous n'avez probablement besoin que de supprimer la possibilité de les interroger, ce que vous pouvez faire avec une vue.

+1

+1 excellente suggestion. Parfois, l'utilisateur dit "après 1 heure, l'enregistrement est supprimé" mais ce qu'ils veulent vraiment dire, c'est "après 1 heure, l'enregistrement n'apparaît jamais à l'écran". –