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 :
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.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 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;
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