Bonjour à tous.
J'ai besoin de votre aide sur une procédure qui met un certain temps à s'exécuter.
Je pense avoir repérer l'instruction qui pose problème :
Puis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT MAX(VOL.JOUR), MIN(VOL.JOUR) INTO LD$MAXDATE, LD$MINDATE FROM RF_VOLUMEPREPREAL VOL WHERE VOL.CODE_ETABLISSEMENT = curETB.CODE AND VOL.CIRCUITPREPARATION = curCP.CODE AND VOL.POINTDEVENTE = curPDV.CODE AND VOL.JOUR > LD$MINDATE AND VOL.REFERENTIEL = LN$IDREF;
Je vous explique un peu la philosophie de la chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 INSERT INTO RF_VOLUMEPREPREAL (CIRCUITPREPARATION, POINTDEVENTE, REFERENTIEL, UO, CODE_ETABLISSEMENT, PROG_WRITER, JOUR) SELECT curCP.CODE, curPDV.CODE, LN$IDREF, LN$VALEUR, curETB.CODE, LC$TAG_UPDATABLE, JOUR.DATE_CALENDRIER FROM RF_JOUR JOUR WHERE JOUR.DATE_CALENDRIER NOT IN( SELECT VOL.JOUR FROM RF_VOLUMEPREPREAL VOL WHERE VOL.CODE_ETABLISSEMENT = curETB.CODE AND VOL.CIRCUITPREPARATION = curCP.CODE AND VOL.POINTDEVENTE = curPDV.CODE AND VOL.JOUR BETWEEN LD$MINDATE AND LD$MAXDATE AND VOL.REFERENTIEL = LN$IDREF) AND JOUR.DATE_CALENDRIER BETWEEN LD$MINDATE AND LD$MAXDATE;
La table RF_VOLUMEPREPREAL contient un grand nombre d'enregistrements (environ 10 millions). Elle contient des UO par jour. Or, tous les jours ne sont pas renseignés.
Ma procédure consiste donc à "boucher les trous" par des 0 entre les dates retournées par la première requête.
Je crois que le problème vient du fait que je fais un insert sur un table qui est elle même interrogée par le select...
Merci de votre aide.
Partager