Bonjour et bravo pour ce site, je sens qu'il me sera tres utile a l'avenir

Mon problême est assez simple en fait .
Dans une procédure stockée j'ai un cruseur qui récupère le nom de différentes tables que je dois mettre a jours . Par exemple je récupère tous les noms de tables ayant la colonne 'PAC' .
Le but c'est de mettre a jour les valeurs de 'PAC' dans toutes ces tables .

exemple :
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
 
CREATE OR REPLACE PROCEDURE MAJ_PAC
(p_new_pac IN varchar2, p_old_pac in varchar2 )
IS
 
cursor c1 is select table_name from user_tab_columns a, user_objects b 
where a.column_name='PAC' and a.table_name=b.object_name 
and b.object_type='TABLE';
 
var1 c1%rowtype;
req varchar2(200);
 
BEGIN
 
open c1;
loop
    fetch c1 into var1;
    exit when c1%NOTFOUND;
    req := 'update '||var1.table_name||' set PAC = '||p_new_pac ||
    'where PAC = '||p_old_pac;
    EXECUTE IMMEDIATE req;
    commit;   
end loop;
close c1;
 
END;
Avec ce systeme ma procedure fait un commit apres chaque table updaté, mon probleme c'est que je ne sais pas a l'avance combien de lignes seront modifiés dans chaque table, ce que je voudrais obtenir c'est par exemple un commit sur ma table dès qu'on a atteint 500 000 lignes modifiés .
Parce que là parfois ma procédure fait un commit apres un update qui impact 16 millions de lignes d'une table, et les rollback segment enflent et le dba devient tout rouge et vient crier dans mon bureau

Merci d'avance !