Bonjour à tous,

Je dois faire un UPDATE sur une table contenant 170000 lignes, le tout en un minimum de temps car l'UPDATE est dans une procédure stockée à utiliser par des utilisateurs.
Mon code est le suivant :
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
 
declare
debextract date := :date1;
finextract date := :date2;
date_boucle date;
tbf number;
type_jour varchar2(3);
cursor c_tbf is 
/*déclaration du curseur*/	 
begin
for c in c_tbf
loop
/*On calcule les durées en minutes*/
	tbf :=0;
	date_boucle := debextract;
	select cal_particularite into type_jour from si_calendrier_20042020 where to_date(date_boucle) = cal_datejour; 
	while date_boucle <= finextract
	/*on fait tout un tas de calcul pour avoir tbf*/
update si_proc_disponibilite 
set prd_tbf = tbf 
where rowid = c.rowid ;
end loop;
commit; 	
end;
Ce code fonctionne met compte tenu du nombre de lignes, cela met plus de 30 minutes à s'exécuter, ce qui n'est pas viable.

Est-ce que qq1 a une idée pour améliorer le script ou une autre méthode pour fait un UPDATE en masse ?

Je suis sous ORACLE 9i et je suis obligée d'utiliser une procédure stockée car elle est lancée via COGNOS qui n'accepte que ce genre d'objets.

Merci pour vos réponses
Darcynette