Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 04/12/2010, 01h25   #1
Nouveau Membre du Club
 
Avatar de nadsky
 
Étudiant
Inscription : juillet 2007
Messages : 118
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2007
Messages : 118
Points : 31
Points : 31
Par défaut 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.
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 :
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
Images attachées
Type de fichier : jpg impr.jpg (10,0 Ko, 3 affichages)
__________________
HQ Nadsky
nadsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 14h10   #2
Nouveau Membre du Club
 
Avatar de nadsky
 
Étudiant
Inscription : juillet 2007
Messages : 118
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2007
Messages : 118
Points : 31
Points : 31
Par défaut le commit

Re,

J'ai pu finalement résoudre mon problème :

En fait, le 01/01/2010 n'avait rien à faire ici, puisqu'on travaillait avec sysdate...j'ai donc remis un sysdate à la place, soit :
Code :
1
2
3
4
5
DECLARE
  my_job number;
BEGIN
  dbms_job.submit(my_job, 'Charge_mens_false;',sysdate, 'TRUNC(LAST_DAY(SYSDATE) + 1)');
END;
J'avais fait ça hier, ma procédure avait bien été prise en compte, mais il manquait quelque chose d'indispensable, et c'est ce qui a "faussé" l'affichage de mes résultats...le COMMIT!!!

Tout marche comme il le faut désormais, et la mise à jour se fait bien tous les 1er du mois à minuit.

Merci quand même!!!
__________________
HQ Nadsky
nadsky 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 08h27.


 
 
 
 
Partenaires

Hébergement Web