Bonjour,

Ci dessous mon code simplifié :

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
 
	requete := '
		SELECT DISTINCT
			A.ANNEE_DOSS_CS,
			A.SEQ_DOSS_CS,
			A.NO_DEM_SEQ,
			B.NUM_CMR
		FROM
			RDD_DEM A,
			RDD_HDE B
		WHERE B.DEM_SEQ = A.NO_DEM_SEQ
		AND A.DATE_FIN_CS < ''' || dateHisto || '''';			
 
	EXECUTE IMMEDIATE requete BULK COLLECT INTO v_tab_annee, v_tab_seq, v_tab_dem, v_tab_cmr;
 
	FOR i IN v_tab_annee.FIRST..v_tab_annee.LAST LOOP
 
		requete := 'DELETE FROM RDD_HDO WHERE DOSSIER_ANNEE = '|| v_tab_annee(i) || ' AND DOSSIER_SEQ = ' || v_tab_seq(i) || ' AND NUMCMR = ' || v_tab_cmr(i);
		EXECUTE IMMEDIATE requete;	
 
		requete := 'DELETE FROM RDD_HDE WHERE DEM_SEQ = ' || v_tab_dem(i) || ' AND NUM_CMR = ' || v_tab_cmr(i);	
		EXECUTE IMMEDIATE requete;	
 
	END LOOP;
Alors le souci c'est que la 1ère requête ramène +sieurs milliers de lignes, autant dire que la suite tombe vite dans les choux... D'un point de vue logique, l'algorithme ci dessus convient mais il ne semble pas réalisable d'un point de vue technique.

Du coup, je me demande comment faire autrement sachant que j'ai besoin de faire la jointure de la 1ère requête pour savoir quels enregistrements je dois ensuite supprimer...

Si vous avez des pistes de réflexion, je suis naturellement preneur !

Frédéric