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 :

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;
Puis :

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;
Je vous explique un peu la philosophie de la chose :
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.