Bonsoir à tous,
Je vous sollicite pour un (gros) problème que j'ai et sur lequel je bloque depuis plusieurs heures.
J'ai lu et relu le tuto "DBMS_JOB ou comment plannifier des jobs sous Oracle", et testé plusieurs solutions, mais mon doute persiste, entre l'utilisation des jobs et schedulers.
Voici mon problème :
J'ai une table contenant un champ integer à 1, que je souhaite faire passer à 0 à chaque premier du mois à minuit, si possible, avec comme date de début le 01/01/2010.
J'ai donc créé une première procédure :
Dans un premier temps, en passant par un job, j'ai fait le test pour une mise à jour de 0 à 1 du champ CHARGE_MENS au bout de 30 secondes soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE OR REPLACE PROCEDURE Charge_mens_false IS BEGIN UPDATE MAGASINS_A_CHARGER_MENS SET CHARGE_MENS = 0 where CHARGE_MENS = 1; END; /
Cela fonctionne parfaitement, au bout de 30s, mon champ charge_mens initialement fixé à 1 passe bien à 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DECLARE my_job number; BEGIN dbms_job.submit(my_job, 'Charge_mens_false;',sysdate, 'SYSDATE + 30/86400'); END; /
Puis, en faisant des recherches, j'ai trouvé que la mise à jour chaque début de mois correspondait à l'instruction suivante :
J'ai donc saisi le job suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TRUNC(LAST_DAY(SYSDATE) + 1)
Je joins à mon message un imprécran du résultat de l'exécution du select.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DECLARE my_job_mensuel number; BEGIN dbms_job.submit(my_job_mensuel, 'Charge_mens_false;','01/01/2010', 'TRUNC(LAST_DAY(SYSDATE) + 1)'); END; /
En testant cette instruction, et en faisant un select des user_jobs, je vois bien que celui-ci a été créé. Seulement, contrairement à mon test des 30 secondes, la plupart des champs sont à null, et la prochaine date est fixée au 01/01/2010.
Je ne vois donc pas vraiment comment résoudre ce problème, et fais appel à votre aide,
Je vous remercie d'avance pour votre aide![]()
Partager