1 pièce(s) jointe(s)
DBMS_Jobs et DBMS_Schedule
Bonsoir à tous,;)
Je vous sollicite pour un (gros) problème que j'ai et sur lequel je bloque depuis plusieurs heures.:roll:
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.:aie:
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 :
Code:
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;
/ |
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:
1 2 3 4 5 6
| DECLARE
my_job number;
BEGIN
dbms_job.submit(my_job, 'Charge_mens_false;',sysdate, 'SYSDATE + 30/86400');
END;
/ |
Cela fonctionne parfaitement, au bout de 30s, mon champ charge_mens initialement fixé à 1 passe bien à 0.
Puis, en faisant des recherches, j'ai trouvé que la mise à jour chaque début de mois correspondait à l'instruction suivante :
Code:
TRUNC(LAST_DAY(SYSDATE) + 1)
J'ai donc saisi le job suivant :
Code:
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;
/ |
Je joins à mon message un imprécran du résultat de l'exécution du select.
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 :ccool: