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 :
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 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')
Mais le résultat est erroné : les outers joins ne fonctionnent plus...
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')
Quelqu'un pourrait-il m'aider?
Merci d'avance.
Partager