IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

DECLARE CONTINUE HANDLER FOR NOT FOUND


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut DECLARE CONTINUE HANDLER FOR NOT FOUND
    bonjour,

    Je lit actuellement un livre consacré à mysql et je suis tombé sur la syntaxe " DECLARE CONTINUE HANDLER FOR NOT FOUND SET fincurs := 1;" , que je n'arrive pas à comprendre. J'ai mis ci-dessous la procédure dans laquelle elle est présente, quelqu'un saurait 'il m'expliquer s'il vous plait ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    delimiter $
     
    DROP PROCEDURE bdutil.cursex1$
     
    CREATE PROCEDURE bdutil.cursex1()
    BEGIN
      DECLARE fincurs BOOLEAN DEFAULT 0;
      DECLARE v_brevet VARCHAR(6);
      DECLARE v_nbHv   DECIMAL(7,2);
      DECLARE v_comp   VARCHAR(4);
     
      DECLARE curs CURSOR FOR 
    	SELECT brevet,nbHVol,comp
    	FROM bdutil.Pilote FOR UPDATE;				---Déclaration du curseur avec verrou.
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET fincurs := 1;
      SET AUTOCOMMIT = 0;
     
      OPEN curs;
      FETCH curs INTO v_brevet,v_nbHv,v_comp;
      WHILE (NOT fincurs) DO 					---Chargement et parcours du curseur.
    	IF (v_comp='AF') THEN 
    		UPDATE bdutil.Pilote SET nbHVol = nbHVol + 100				---Mise à jour de la table Pilote par l’intermédiaire du curseur.
    		WHERE brevet = v_brevet;
    	ELSEIF (v_comp='SING') THEN 
    	       UPDATE bdutil.Pilote SET nbHVol = nbHVol - 100 WHERE brevet = v_brevet;
    	ELSE
                   DELETE FROM bdutil.Pilote WHERE brevet = v_brevet;
    	END IF;
     
    	FETCH curs INTO v_brevet,v_nbHv,v_comp;  
      END WHILE;
      CLOSE curs;
     COMMIT;			---Validation de la transaction.
    END;
    $
    Merci beaucoup pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 55
    Par défaut
    Bonjour,

    Cette commande permet de ne pas avoir de message d'erreur quand tu n'as plus d'enregistrements a "Fetcher" ( la fin de ton curseur ).

    A lieu d'envoyer une erreur, l'arrivée à la fin du curseur change la valeur de la variable fincurs pour la mettre a 1.

    le While ( not fincurs ) est donc a lire comme

    Tant que ( not 0 ) c'est à dire 1 ... soit Vrai
    ....

    Et à la fin du curseur, ca devient
    Tant que ( not 1 ) c'est à dire 0... soit Faux .. Soit fin while
    ....


    Est ce clair ?

    Francis

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut
    Bonjour,

    Je comprend le principe
    Merci beaucoup pour ton aide

    José

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/04/2010, 17h47
  2. Réponses: 5
    Dernier message: 28/01/2010, 21h41
  3. Réponses: 5
    Dernier message: 11/06/2009, 22h36
  4. Réponses: 2
    Dernier message: 25/08/2008, 16h37
  5. Source not found for class ...
    Par singleProject dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 06/08/2008, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo