Il y a un autre avantage à utiliser le DECLARE @local_variable CURSOR
syntaxe que je viens de découvrir.
L'avantage se produit lorsqu'une procédure stockée en appelle une autre et que les deux procédures ont des curseurs ouverts en même temps. Si DECLARE cursor_name CURSOR
est utilisé pour définir les curseurs, et les deux procédures utilisent le même nom_curseur, alors vous obtenez
Par contre, Si DECLARE @local_variable CURSOR
est utilisé pour définir les curseurs dans les procédures stockées parent et enfant, puis @local_variable
est local à chaque procédure et il n'y a pas de conflit. Pour ceux qui n'ont jamais utilisé cette méthode auparavant, voici un exemple, en utilisant @C
comme variable locale :
DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...