transformer des ANSI join en join "pas ANSI"
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:
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:
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... :cry:
Quelqu'un pourrait-il m'aider?
Merci d'avance.