Curseur (base de données)
Un curseur est une structure de donnĂ©es d'un langage de requĂȘte de base de donnĂ©es relationnelle[1], consistant en un pointeur de donnĂ©es permettant d'effectuer des calculs de variables Ă travers plusieurs enregistrements.
Il introduit un itérateur, qui peut effectuer des opérations, par exemple : ne traiter qu'une ligne sur deux lors de son parcours.
Principe
L'utilisation consiste Ă :
- Déclarer le curseur définissant le jeu d'enregistrement (
DECLARE
). - Ouvrir le curseur pour Ă©tablir le jeu d'enregistrement (
OPEN
). - Récupérer les données des variables locales (
FETCH
). - Fermer le curseur (
CLOSE
).
Un curseur par défaut traite les données ligne par ligne, mais un curseur scroll[2] n'est pas limité et peut tenir compte des lignes précédentes. En effet ce dernier peut faire appel à des données de façon absolue, à partir du début des enregistrements (FETCH ABSOLUTE
), ou relativement Ă sa position (FETCH RELATIVE
).
De plus, un curseur peut ĂȘtre SENSITIVE
ou INSENSITIVE
si on veut qu'il puisse modifier les enregistrements qu'il contient, ou pas[3].
Enfin, un curseur peut ĂȘtre dĂ©clarĂ© WITH HOLD
pour éviter qu'il ne soit fermé par une transaction informatique[4].
Par ailleurs, un curseur peut ĂȘtre utilisĂ© dans une clause WHERE
avec la syntaxe :
UPDATE table1
SET champ1 = 0
WHERE CURRENT OF curseur1
Exemples
XQuery
On utilise la fonction subsequence()
:
let $displayed-sequence := subsequence($result, $start, $item-count)
MySQL
DELIMITER $
CREATE PROCEDURE curseur1()
BEGIN
DECLARE resultat varchar(100) DEFAULT "";
DECLARE c1 CURSOR FOR
SELECT page_title
FROM wiki1.wiki1_page
WHERE page_namespace = 0;
OPEN c1;
FETCH c1 INTO resultat;
CLOSE c1;
SELECT resultat;
END;$
DELIMITER ;
MsSQL
USE Base1
declare @Nom varchar(20)
DECLARE curseur1 CURSOR FOR SELECT Prenom FROM Table1
OPEN curseur1
/* Premier enregistrement de la sélection */
FETCH NEXT FROM curseur1 into @Nom
print 'Salut ' + @Nom
/* Traitement de tous les autres enregistrements dans une boucle */
while @@FETCH_STATUS = 0
begin
FETCH NEXT FROM curseur1 into @Nom
print 'Salut ' + @Nom
end
CLOSE curseur1;
DEALLOCATE curseur1;
Notes et références
- (en) Zohra BellahsĂšne, Database and XML Technologies: First International XML Database Symposium, XSYM 2003, Berlin, Germany, September 8, 2003, Proceedings, Springer Science & Business Media, (lire en ligne)
- Kevin Kline, SQL en concentré, O'Reilly Media, Inc., (lire en ligne)
- Frédéric Brouard, Rudi Bruchez et Christian Soutou, SQL, Pearson Education France, (lire en ligne)
- (en) Kevin Gashyna et Michael Kyprianou, DB2 Universal Database V.8 Application Development Certification Guide, Prentice Hall Professional, (lire en ligne)
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « Cursor (databases) » (voir la liste des auteurs).