{SQL Server} c'est koi un curseur

Fermé
lolipop18 Messages postés 3 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 11 décembre 2009 - 10 déc. 2009 à 13:01
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 11 déc. 2009 à 09:29
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 lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 déc. 2009 à 16:39
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 lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
11 déc. 2009 à 09:29
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 26010 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
10 déc. 2009 à 14:16
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 lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 déc. 2009 à 14:40
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 jeudi 10 décembre 2009 Statut Membre Dernière intervention 11 décembre 2009
10 déc. 2009 à 16:09
"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 26010 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
10 déc. 2009 à 16:51
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 26010 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289 > blux Messages postés 26010 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024
11 déc. 2009 à 09:27
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 jeudi 10 décembre 2009 Statut Membre Dernière intervention 11 décembre 2009
11 déc. 2009 à 08:58
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