Bonjour,
Il me semble avoir un problème de curseur lors de l'appel de ma procédure stockée. Voici le code :
Lors de l'insertion d'enregistrements dans les tables T1 et T2, je fais appel à plusieurs procédures stockées d'insertion et je mets dans une table d'audit les identifiants des enregistrements inséré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
27
28
29
30
31
32
33
34
35
36
37
38
39
40 CREATE PROCEDURE nom_proc @premierParam bigint, @deuxiemeParam smallint, --etc. AS DECLARE @supNumeroT1 bigint DECLARE @supNumeroT2 int DECLARE Curseur_supNumeroT1 CURSOR FOR SELECT numeroT1 FROM audit_T1 DECLARE Curseur_supNumeroT2 CURSOR FOR SELECT numeroT2 FROM audit_T2 --On supprime en premier les enregistrements de T2. OPEN Curseur_supNumeroT2 FETCH next FROM Curseur_supNumeroT2 INTO @supNumeroT2 WHILE @@FETCH_STATUS = 0 BEGIN DELETE T2 FROM T2 WHERE numeroT2=@supNumeroT2 END CLOSE Curseur_supNumeroT2 --On supprime ensuite les enregistrements de T1 dans T1. OPEN Curseur_supNumeroT1 FETCH next FROM Curseur_supNumeroT1 INTO @supNumeroT1 WHILE @@FETCH_STATUS = 0 BEGIN DELETE T1 FROM T1 WHERE numeroT1=@supNumeroT1 END CLOSE Curseur_supNumeroT1
Seulement, si une des procédures stockées d'insertion plante, je voudrais effacer les enregistrements insérés jusque là (c'est à ça que servent les tables d'audit). Le problème, c'est que lorsque je lance cette procédure là, j'efface une seule ligne de chacune des deux tables, puis la requête continue indéfiniment (jusqu'au timeout) comme si je faisais une boucle infinie.
Partager