{SQL Server} c'est koi un curseur

lolipop18 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
SVP pouriez vous m'expliquer c quoi un curseur et à quoi sert il?? un exemple ne serait pas de refus merci.
A voir également:

6 réponses

OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
 
voici un exemple de script que j'ai fait. Nous avons un call center, et une table client par lettre de alphabet. Chaque table associée à un agent commercial. Le problème c'est de mettre à jour ces tables chaque jour selon un nombre de fichier trouvés dans x répertoires sur le réseau. Le nombre de fichier pouvant varier chaque jour, impossible de créer un pack pour un fichier qui peut-être ne sera pas là ...
Le nombre de variantes étant trop important, j''ai donc créé un cursor pour créer un sql dynamique :

SET @SQL = 'INSERT INTO [MaBase].[dbo].[import_temp]('[NUMPAQ], [NOTPAQ])'

DECLARE cursor_forum CURSOR FOR SELECT [rowdesc] FROM [MaBase].[dbo].[tmpFile]
DECLARE @row VARCHAR(600), @insert VARCHAR(1500)
DECLARE @do INT
SET @do = 1
OPEN cursor_forum
FETCH NEXT FROM cursor_forum INTO @row
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
SET @insert = @sql + ' VALUES (' + @row + ')'

EXEC(@insert)
SET @do = @do + 1
END
FETCH NEXT FROM cursor_forum INTO @row
END
CLOSE cursor_forum
DEALLOCATE cursor_forum

Je ne rentre pas dans les détails mais c'est vraiment quand on ne peut faire autrement qu'il faut utiliser les curseurs. Dans mon cas des fichiers à importer tous les jours ... le nombre pouvant varier ... données temporaires ...
1
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
 
c'est juste du concret, l'exemple de Blux est plus simple mais tout à fait parlant.
Gardez en mémoire que c'est possible, il ne faut surtout pas que cela vous fasse peur.
Bonne journée
1
blux Messages postés 27127 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
Salut,

en gros, c'est un pointeur qui va pouvoir te permettre d'accéder de manière individuelle aux résultats d'une requête, un peu comme si tous les résultats étaient mis dans un tableau et que tu puisses le parcourir.

C'est utilisé pour faire des traitements particuliers sur un jeu de résultats et c'est employé essentiellement avec du SQL procédural (type PL/SQL ou SQL dans un programme batch).

Google sera ton ami pour des exemples...
0
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
 
J'ajouterai que c'est à éviter car cela demande beaucoup de ressources à un serveur ... mais parfois il est impossible de faire autrement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lolipop18 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
"C'est utilisé pour faire des traitements particuliers sur un jeu de résultats"

quels traitement par exemple (un tri) ???
0
blux Messages postés 27127 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
quels traitement par exemple (un tri) ???
Non, ça, tu le laisses faire par le moteur SQL avec un GROUP BY...:-)

C'est traiter de manière particulière UNE ligne de résultat (le tri ne s'interesse qu'à la globalité des résultats)

Ex :
Si une ligne contient toto, alors mettre à jour la table titi...
Si une ligne contient tata, alors mettre à jour la table titi et tutu..
Si une ligne contient tutu, alors mettre à jour la table tata et toto...

Tu devrais écrire 3 requêtes SQL pour faire ces 3 traitements, à passer sur toutes les lignes de résultat, donc 3 lancements de la requête initiale pour les mises à jour.

Avec un curseur, tu lances ta requête, et à chaque ligne remontée (fetch du curseur) tu fais ton traitement : les données ne sont lues qu'une fois...
0
blux Messages postés 27127 Date d'inscription   Statut Modérateur Dernière intervention   3 361 > blux Messages postés 27127 Date d'inscription   Statut Modérateur Dernière intervention  
 
euh le tri, c'est ORDER BY pas GROUP BY (bien qu'il trie quand même dans ce cas)...

mon clavier a fourché ;-)
0
lolipop18 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
merci à tous, après le message d'oliver T, je crois que je ne veux plus savoir c quoi un curseur ;-) lol.c'est plus compliqué que je ne le pensais.
0