Bonjour,
je suis sous ORACLE V10.2 et j'ai un problème avec une requête SQL qui s'execute indéfiniment.
En fait, si j'execute la requête sans les union (en rouge dans le code), elle passe normalement.
Mais les affaires se corsent avec l'ajout des union dans le exists.
Auriez-vous une idée ?
Merci

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
SELECT DISTINCT
       bod_sim_operation.OPE_CODE14   Code_14, 
       bod_sim_operation.OPE_NOMGPNOEUD    Nom, 
       bod_sim_operation.OPE_TYPEOPERATION    Type_Operation_BODEGA , 
       bod_sim_operation.OPE_ETATOPERATION    Etat_BODEGA
FROM     bod_sim_operation INNER JOIN
         bod_sim_candidat ON bod_sim_operation.OPE_ID = bod_sim_candidat.OPE_ID
WHERE    (bod_sim_operation.code_ur = 'PA')
AND    NOT EXISTS ( SELECT * 
                    FROM   ado_t_dr INNER JOIN
         		   ado_t_base_pgm ON ado_t_dr.N = ado_t_base_pgm.SITE_DR INNER JOIN
			   bde_sim_base_dr ON ado_t_dr.LIBELLE_DR = bde_sim_base_dr.dr_code
                   WHERE   (bde_sim_base_dr.urm_code = 'PA')  
                   AND     ado_t_base_pgm.SITE_ETAT <> 'ANNULE' 
                   AND     ado_t_base_pgm.PURGE = 0 
                   AND     bod_sim_operation.OPE_CODE14 = ado_t_base_pgm.SITE_CODE_PG
                   )
AND    EXISTS (
	SELECT DISTINCT 
		OPE.OPE_CODE14
	FROM	bod_sim_operation OPE INNER JOIN
		bod_sim_candidat CAN ON OPE.OPE_ID = CAN.OPE_ID
	WHERE   OPE.OPE_TYPEOPERATION IN ('Aménagement BTS', 'Réaménagement BTS','Aménagement MIXTE', 'Réaménagement MIXTE')
	AND    (OPE.OPE_ETATOPERATION IN ('EN COURS', 'GELEE') ) 
        AND    CAN.CAN_RANKING = 'Principal'
	AND    OPE.code_ur = 'PA'
	AND (
  		( (CAN.RECETTECONSTRUCTEUR_900_R IS NOT NULL) AND (CAN.RECETTECONSTRUCTEUR_900_R > '31/12/' || to_char(extract(YEAR from sysdate) - 1)) )
		OR ((CAN.RECETTECONSTRUCTEUR_1800_R IS NOT NULL) AND (CAN.RECETTECONSTRUCTEUR_1800_R > '31/12/' || to_char(extract(YEAR from sysdate) - 1)) )
		OR ( (CAN.RECETTECONSTRUCTEUR_900_R IS NULL) AND (CAN.RECETTECONSTRUCTEUR_1800_R IS NULL)
		AND (CAN.EDITIONFN73_900_R is NULL) AND (CAN.EDITIONFN73_1800_R IS NULL) )
	)
        AND    bod_sim_operation.OPE_CODE14 = OPE.OPE_CODE14    

	UNION

	SELECT DISTINCT 
		OPE.OPE_CODE14
	FROM	bod_sim_operation OPE INNER JOIN
		bod_sim_candidat CAN ON OPE.OPE_ID = CAN.OPE_ID
	WHERE  OPE.OPE_TYPEOPERATION IN ('Aménagement UMTS', 'Réaménagement UMTS','Aménagement MIXTE', 'Réaménagement MIXTE')
	AND    (OPE.OPE_ETATOPERATION IN ('EN COURS', 'GELEE')) 
        AND    CAN.CAN_RANKING = 'Principal'
	AND    OPE.code_ur = 'PA'
	AND (
		((CAN.RECETTECONSTRUCTEUR_UMTS_R IS NOT NULL) AND (CAN.RECETTECONSTRUCTEUR_UMTS_R > '31/12/' || to_char(extract(YEAR from sysdate) - 1)) )
		OR ( (CAN.RECETTECONSTRUCTEUR_UMTS_R IS NULL) AND (CAN.EDITIONFN73_UMTS_R IS NULL) )
	)
        AND    bod_sim_operation.OPE_CODE14 = OPE.OPE_CODE14
        
	UNION

	SELECT DISTINCT 
		OPE.OPE_CODE14
	FROM	bod_sim_operation OPE INNER JOIN
		bod_sim_candidat CAN ON OPE.OPE_ID = CAN.OPE_ID
	WHERE  OPE.OPE_TYPEOPERATION IN ('Répéteurs UMTS', 'Répéteurs GSM')
	AND    (OPE.OPE_ETATOPERATION  IN ('EN COURS', 'GELEE')) 
        AND    bod_sim_candidat.CAN_RANKING = 'Principal'
	AND    OPE.code_ur = 'PA'
	AND   (OPE.OPE_FN1 > '01/12/2005')
        AND    bod_sim_operation.OPE_CODE14 = OPE.OPE_CODE14
)
ORDER BY bod_sim_operation.OPE_NOMGPNOEUD;