Bonjour,
Je fais de la reprise de données (beaucoup de données).
Pour cela, je fais un curseur qui sélectionne des données en base et fais des updates suivant des critères voulus. Le problème est que le traitement dure des heures.
En effet, les updates sont faits un par un.
Mon idée, peut être que vous avez une meilleure, est de faire des updates en parralèle. Le problème est que je ne sais pas comment faire.
En bleu le parallélisme que je rajoute. Je le trouve cependant sans intérêt vu que je continue toujours à faire les updates un par un (filtrage sur condition5 et condition6).
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 DECLARE a NUMBER(10); CURSOR C_EMP Is select /*+ full (op) parallel (op, 8) */ * from Table1 op where condition1 and ocondition2; BEGIN For c in C_EMP Loop SELECT count(*) into a from Table2 ciem where condition3 and condition4 and ....; If a>0 Then update /*+PARALLEL (op, 8) */ Table1 op set op.b = c, op.d=e, ..... where condition5 and conditions6; Else update /*+PARALLEL (op, 8) */ Table1 op set op.b = f, op.d=e, ..... where condition5 and conditions6; End if ; IF (MOD(C_EMP%rowcount,1000) = 0) THEN BEGIN COMMIT; END; END IF ; End loop ; END; / EXIT;
Partager