Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/02/2008, 10h20   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 13
Points : 4
Points : 4
Par défaut JOB Oracle - interval

Bonjour,
je dois créer un job sur Oracle 9i et je voudrais que ma fonction soit lancée toutes les deux heures indépendamment du temps d'exécution de cette dernière. J'ai essayé cella mais il me semble que l'interval n'est pas bien défini.
Quelqu'un peut m'aider ?

Merci.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'nomFonction;'
     ,next_date => sysdate
     ,interval  => 'SYSDATE+(2/24)'
     ,no_parse  => TRUE
    );
END;
/
commit;
bruninho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 10h39   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ça parait bon pourtant, c'est quoi le problème ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 10h54   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Orafrance, l'exécution de l'interval est lancée APRES le job.

Ce qui fait que si le job dure 1h, ça décale d'une heure à chaque fois.

Pour résoudre ça, faut faire un "trunc(sysdate) sur 2h" pour ramener l'heure de départ

Un exemple de code :
Code :
TRUNC(SYSDATE) + (2 + TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')) - MOD(TO_NUMBER(TO_CHAR(SYSDATE, 'HH24')),2)) / 24
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 14h10   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 13
Points : 4
Points : 4
Merci beacoup,
J'ai également essayé ceci et ça fonctionne.

Code :
TRUNC(SYSDATE,'mi') + 2/24
bruninho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 14h20   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Non ! Tu tronque la date à la minute !

Le calcul de la prochaine date s'effectue à la fin du job.
S'il commence à 14h00, finit à 14h15, ton prochain job sera à 16h15

Il n'y a pas de moyen de savoir à quelle heure a commencé un job (j'ai jamais essayé de chercher si avec des var de session ça passe).
Tout dépend combien de temps prend ton job.
S'il prend moins d'une heure, un trunc(sysdate, 'HH24') + 2/24 c'est bon.
S'il peut prendre plus d'une heure, faut passer par la requête que j'ai fourni plus haut (elle prend que les heures paires).
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h18.


 
 
 
 
Partenaires

Hébergement Web