AccueilđŸ‡«đŸ‡·Chercher

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 Ă  :

  1. Déclarer le curseur définissant le jeu d'enregistrement (DECLARE).
  2. Ouvrir le curseur pour Ă©tablir le jeu d'enregistrement (OPEN).
  3. Récupérer les données des variables locales (FETCH).
  4. 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

  1. (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)
  2. Kevin Kline, SQL en concentré, O'Reilly Media, Inc., (lire en ligne)
  3. Frédéric Brouard, Rudi Bruchez et Christian Soutou, SQL, Pearson Education France, (lire en ligne)
  4. (en) Kevin Gashyna et Michael Kyprianou, DB2 Universal Database V.8 Application Development Certification Guide, Prentice Hall Professional, (lire en ligne)

Voir aussi

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.