Bonjour,

Je dois paralleliser des traitemantents. Cela consiste a metre un flag dans une colonne avec ne numero de processus qui va traiter les données.

Existant:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
DECLARE
 
CURSOR c1 IS
select arfcext,count(arfcext) as NB
from v5.intart
group by arfcext order by NB desc;
 
 
TYPE tableau_numerique IS TABLE OF NUMBER(9) INDEX BY BINARY_INTEGER;
Tab   tableau_numerique;
 
indice NUMBER(2);
i number (9);
j number (9);
min_val number (9);
min_ind number (9);
compt number (9);
 
BEGIN
DBMS_OUTPUT.ENABLE( 1000000 ) ;
indice :=&1;
i :=0;
min_val:=0;
min_ind:=0;
compt:=0;
 
for j in 0..indice-1 loop
	Tab(j):=0;
end loop;
 
dbms_output.put_line( 'Indice de // :'||indice);
 
FOR r1 IN c1 LOOP
 
	if compt > 5000 then
	min_ind:=0;
	min_val:=Tab(0);	
	for j in 1..indice-1 loop
--		dbms_output.put_line( 'Indice val // :'||Tab(j)|| ' et min'||min_val);
		if Tab(j) < min_val then
		   min_val:=Tab(j);
		   min_ind:=j;
		end if;
	end loop;
	compt:=0;
	COMMIT;
	end if;
 
	Tab(min_ind):=Tab(min_ind) + r1.NB;
    compt := compt + r1.NB ;
    update v5.intart set ARFUTIL =min_ind where arfcext=r1.arfcext;
 
END LOOP;
 
for j in 0..indice loop
	dbms_output.put_line( 'Tab :'||Tab(j));
end loop;
 
end;
/

Je suis a la recherche d'optimisation car la il a beacoup d'"arfcext" avec un NB=1 ce qui fait enormente d'update unitaire et ce qui prend beacoup de temps.

MERCI