Bonjour à tous,
j'ai une procédure stockée dans laquelle j'utilise un curseur. Dans la déclaration du curseur, j'utilise une clause UPDATE. Cela a pour conséquence un temps d'exécution énorme. j'ai vu dans la littérature qu'utiliser une clause UPDATE dans un curseur n'était pas conseillé. Je sollicite donc votre coup de pouce à cet effet.
ci-dessous la procédure stockée:
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 CREATE PROCEDURE calcule_ieme_tous3 AS BEGIN declare @counter int declare @cli int declare @max int declare curs cursor for select distinct cli from tr_cli_qrt2 order by cli open curs fetch next from curs into @cli while @@fetch_status = 0 begin set @max=(select Max(ieme) from tr_cli_qrt where cli=@cli) if (@max=null) set @max='0' set @counter=@max update tr_cli_qrt set @counter = ieme = @counter + 1 where cli= @cli fetch next from curs into @cli set @max=@counter end close curs deallocate curs END GO
le résultat obtenu est le suivant
cli post_quart expl ieme BP
539901 A1 840 1 00005
539902 A2 840 1 00001
539904 A3 840 1 00001
539904 A4 840 2 00001
539905 A5 840 1 00198
539906 A6 840 1 00464
539907 A7 840 1 00455
539909 A8 840 1 00198
539909 A9 840 2 00198
539909 A9 840 3 00197
539911 A10 840 1 00489
avec la table tr_cli_qrt telle que:
->cli int
->post_quart char(2)
-> expl char(3)
->ieme int (la colonne du calcul. elle a pour valeur 0 avant le traitement)
-> BP char(5)
Merci d'avance!
Partager