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