bonjour, pouvez-vous m'aider à améliorer le temps de traitement d'une procedure qui traite l'historique(comparaison de deux tables de plus 1 million d'enregistrement ).
Code sql : 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
62
63
64
65
66
67
68
69
70
71
72
73
74 SQL> desc t_paie -- Nom NULL ? Type ----------------------------------------- -------- ---------------------------- IDENT VARCHAR2(12) CODE VARCHAR2(5) MONTANT NUMBER(10,2) SQL> desc hist_paie Nom NULL ? Type ----------------------------------------- -------- ---------------------------- IDENT VARCHAR2(12) CODE VARCHAR2(5) MONTANT NUMBER(10,2) DU DATE AU DATE SQL> desc t_temp Nom NULL ? Type ----------------------------------------- -------- ---------------------------- IDENT VARCHAR2(12) SQL> CREATE OR REPLACE PROCEDURE histo_paie(mois_new in date,mois_old in date) IS 2 BEGIN 3 DECLARE 4 CURSOR paie_new IS 5 SELECT ident, montant 6 FROM t_paie 7 WHERE code = 'N'; 8 CURSOR paie_old IS 9 SELECT ident, montant 10 FROM hist_paie 11 WHERE code = 'N' AND au = mois_old; 12 13 BEGIN 14 15 FOR rec_new IN paie_new LOOP 16 FOR rec_old IN paie_old LOOP 17 IF rec_old.ident = rec_new.ident THEN 18 IF rec_old.montant <> rec_new.montant THEN 19 INSERT INTO t_temp 20 SELECT DISTINCT (ident) FROM t_paie WHERE ident = rec_new.ident; 21 ELSE 22 UPDATE hist_paie 23 SET au = mois_new 24 WHERE au = mois_old and ident =rec_old.ident; 25 END IF; 26 END IF; 27 END LOOP; 28 END LOOP; 29 commit; 30 INSERT INTO hist_paie 31 SELECT ident, code, montant, mois_new du,mois_new au 32 FROM t_paie 33 WHERE ident IN (SELECT ident FROM t_temp); 34 COMMIT; 35 END; 36 END; 37 / Procédure créée. SQL> begin 2 dbms_output.enable (100000); 3 dbms_output.put_line('DEBUT TRAITEMENT : '||to_char(sysdate,'HH24:MI:SS')); 4 histo_paie('01/02/2010','01/01/2010'); 5 dbms_output.put_line('FIN TRAITEMENT : '||to_char(sysdate,'HH24:MI:SS')); 6* end; SQL> / DEBUT TRAITEMENT : 13:38:09 FIN TRAITEMENT : 16:32:57 Procédure PL/SQL terminée avec succès.
Partager