Bonjour,

Etant donné que je suis victime du bug 4369235 (voir mon message posté ici => http://www.developpez.net/forums/sho...23&postcount=8), je souhaiterais ré-écrire une belle requête contenant des ANSI joins en une requête ne contenant PAS d'ANSI joins...

Cependant, je n'y parviens pas... Soit quelque chose m'échappe, soit c'est impossible dans le cas particulier de ma requête...

Voici un bout de ma requête :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SELECT rc1.idtrsucal ID
     , sa1.idtsga id_affilie
     , TO_DATE (NVL (ve1.valrmp, ve1.valelm), 'dd.mm.yyyy') date_calcul
  FROM resultat_calcul rc1 JOIN jeu_donnee jd1 ON (rc1.idtjeudon =
                                                                 jd1.idtjeudon
                                                  )
       JOIN calcul_plan cp1 ON (rc1.idtcalpln = cp1.idtcalpln)
       JOIN calcul ca1 ON (cp1.idtcal = ca1.idtcal)
       JOIN d_type_calcul tc1 ON (ca1.idttypcal = tc1.idttypcal)
       JOIN signaletique_affilie_ctp sa1 ON (jd1.idtaflpln = sa1.idtaflpln)
       LEFT JOIN (valeur_element_mgc ve1 JOIN element_mgc el1 ON ve1.idtelm =
                                                                    el1.idtelm
                                                            AND UPPER
                                                                  (el1.codcaltqe) =
                                                                  mgckggen.get_par
                                                                    ('k_ctpdtecal'))
       ON ve1.idtcalpln = cp1.idtcalpln
 WHERE (tc1.flgrcf = 'OUI' OR tc1.flgpon = 'OUI' OR tc1.flgchgech = 'OUI')
   AND NOT EXISTS (                      -- Le calcul du plan n'est pas annulé
         SELECT 1
           FROM calcul_plan cp2
              , calcul ca2
          WHERE cp2.idtcal = ca2.idtcal
            AND idtcalplnanl = cp1.idtcalpln
            AND ca2.anncal = ca1.anncal
            AND cp2.idtpln = cp1.idtpln)
   AND NOT EXISTS ( -- Si c'est un calcul prévisionnel, il ne doit pas exister
         SELECT 1
           -- de calcul du plan rectificatif pour la même année et le même plan
         FROM   calcul_plan cp3
              , calcul ca3
              , d_type_calcul tc3
          WHERE cp3.idtcal = ca3.idtcal
            AND ca3.idttypcal = tc3.idttypcal
            AND ca3.anncal = ca1.anncal
            AND cp3.idtpln = cp1.idtpln
            AND tc1.flgpon = 'OUI'
            AND tc3.flgrcf = 'OUI')
Voici la tentative de transformation que j'ai effectuée :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
SELECT rc1.idtrsucal ID
     , sa1.idtsga id_affilie
     , TO_DATE (NVL (ve1.valrmp, ve1.valelm), 'dd.mm.yyyy') date_calcul
  FROM resultat_calcul rc1
     , jeu_donnee jd1
     , calcul_plan cp1
     , calcul ca1
     , d_type_calcul tc1
     , signaletique_affilie_ctp sa1
     , valeur_element_mgc ve1
     , element_mgc el1
 WHERE rc1.idtjeudon = jd1.idtjeudon
   AND rc1.idtcalpln = cp1.idtcalpln
   AND cp1.idtcal = ca1.idtcal
   AND ca1.idttypcal = tc1.idttypcal
   AND jd1.idtaflpln = sa1.idtaflpln
   AND ve1.idtcalpln = cp1.idtcalpln (+)
   AND ve1.idtelm = el1.idtelm
   AND UPPER (el1.codcaltqe) = mgckggen.get_par ('k_ctpdtecal')
   AND (tc1.flgrcf = 'OUI' OR tc1.flgpon = 'OUI' OR tc1.flgchgech = 'OUI')
   AND NOT EXISTS (                      -- Le calcul du plan n'est pas annulé
         SELECT 1
           FROM calcul_plan cp2
              , calcul ca2
          WHERE cp2.idtcal = ca2.idtcal
            AND idtcalplnanl = cp1.idtcalpln
            AND ca2.anncal = ca1.anncal
            AND cp2.idtpln = cp1.idtpln)
   AND NOT EXISTS ( -- Si c'est un calcul prévisionnel, il ne doit pas exister
         SELECT 1
           -- de calcul du plan rectificatif pour la même année et le même plan
         FROM   calcul_plan cp3
              , calcul ca3
              , d_type_calcul tc3
          WHERE cp3.idtcal = ca3.idtcal
            AND ca3.idttypcal = tc3.idttypcal
            AND ca3.anncal = ca1.anncal
            AND cp3.idtpln = cp1.idtpln
            AND tc1.flgpon = 'OUI'
            AND tc3.flgrcf = 'OUI')
Mais le résultat est erroné : les outers joins ne fonctionnent plus...

Quelqu'un pourrait-il m'aider?

Merci d'avance.