Bonjour,
après des recherches infructueuses, je sollicite votre aide.
Est-il possible, et si oui comment, de créer un CURSOR dynamiquement ?
Le select dynamique fonctionne sans problème :
De même un cursor "normal" en dur fonctionne bien sur sans problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE Procedure DYNAPROC @NUM_HISTO tinyint, @MAX int AS BEGIN declare @REQUETE char( 1000 ) select @REQUETE = "sp_spaceused HIST_0" + convert( varchar, @NUM_HISTO ) print @REQUETE exec (@REQUETE) end
Par contre, là, ça plante à l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 declare CUR_HISTO cursor for select NUM, TP, ST, MONTANT from HIST_02 for read only open CUR_HISTO fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT select @RET = @@sqlstatus while( @RET = 0 ) begin if( @MONTANT >= @MAX ) begin print "ok" end fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT select @RET = @@sqlstatus end
avec l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select @REQUETE = 'declare CUR_HISTO cursor for select NUM, TP, ST, MONTANT from HIST_02 for read only' exec (@REQUETE) open CUR_HISTO fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT select @RET = @@sqlstatus ...
J'ai essayé pleins de techniques différentes, mais à chaque fois la même erreur. D'après ce que je comprend, le curseur serait construit dans un processus différent, et après le "exec", le curseur n'existe plus. Pouvez-vous m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 The cursor 'CUR_HISTO' can not be used as it could not be found. It is possible that either it was not declared or it is not available in the current context.
Merci.
Partager