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

Requêtes MySQL Discussion :

récupérer le nombre de lignes UPDATées dans une procédure stockée


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut récupérer le nombre de lignes UPDATées dans une procédure stockée
    Bonjour,

    j'aimerais pouvoir utiliser l'information du nombre de lignes changées par un UPDATE fait dans une procédure stockée (plus précisément, une FUNCTION)

    voici un exemple simplifié :
    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
     
    CREATE FUNCTION ma_fonction()
    RETURNS INT
    BEGIN DECLARE nb_update INT DEFAULT 0;
     
    UPDATE table1 SET col1 = "cool" WHERE col2 LIKE "cool";
     
    SET nb_update = ##le_nombre_de_lignes_affectées_par_le_UPDATE##
     
    UPDATE table2 SET col1 = "cool" WHERE col2 LIKE "cool";
     
    SET nb_update = nb_update + ##le_nombre_de_lignes_affectées_par_le_UPDATE##
     
    RETURN nb_update;
    END
    Comme vous l'avez devinez, je cherche la vraie syntaxe pour ##le_nombre_de_lignes_affectées_par_le_UPDATE##

    Dans le manuel MYSQL 5, il est écrit au §13.1.10:
    "UPDATE retourne le nombre d'enregistrements ayant changé. Depuis la version 3.22 de MySQL, la fonction mysql_info() de l'API C retourne le nombre de colonnes qui correspondaient, le nombre de colonnes mises à jour et le nombre d'erreurs générées pendant l'UPDATE."

    Mais comment je "capte" ce que UPDATE retourne ?

    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 70
    Points
    70
    Par défaut
    Tu disais que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dans le manuel MYSQL 5, il est écrit au §13.1.10: 
    "UPDATE retourne le nombre d'enregistrements ayant changé".
    Or, dans le manuel MYSQL 5, il est écrit au chapitre 13.1.10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE met à jour des enregistrements dans une tables avec de nouvelles valeurs. La clause SET indique les colonnes à modifier et les
    valeurs à leur donner. La clause WHERE, si fournie, spécifie les enregistrements à mettre à jour.
    Utilise la fonction COUNT comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT count( nom de colonne) FROM `nom de table`

  3. #3
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    enfait je pense tout simplement qu'il faille faire le "SELECT de l'UPDATE"

    je m'explique :

    tu réalise à la fin de ta fonction UN SELECT COUNT(*) avec les même clauses WHERE que l'UPDATE!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE table1 SET col1 = "cool" WHERE col2 LIKE "cool";
    s'il à modifié 13 lignes alors cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) FROM  WHERE col2 LIKE "cool";
    retournera le nombre 13 !

    la seule exception :
    Si tu veux mettre la valeur "cool" à un champ qui contient "cool" l'update ne va rien faire. l'UPDATE modifiera 12 lignes. et le select affichera 13!
    Ca n'a aucune incidence si tu ne veux pas savoir quelles lignes n'avaient pas besoin d'être mise à jour
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par doc MySQL
    ROW_COUNT() returns the number of rows updated, inserted, or deleted by the preceding statement. This is the same as the row count that the mysql client displays and the value from the mysql_affected_rows() C API function.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Obtenir le nombre de lignes affecté dans une procédure stockée
    Par MaelstroeM dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 23/03/2011, 12h01
  2. Réponses: 5
    Dernier message: 23/05/2008, 08h05
  3. [MySQL] Comment récupérer le nombre d'élément présent dans une table
    Par TrX314 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/04/2007, 21h20
  4. Récupérer la valeur d'une ligne dans une procédure stockée
    Par mobscene dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/12/2006, 19h29
  5. Nombre de ligne maxi dans une table ACCESS
    Par ygiraudeau dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 17h23

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