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 :

Pocédure stockée qui mouline.


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 52
    Par défaut Pocédure stockée qui mouline.
    Bonjour,

    Je suis en train de tester les procédure stocké sur MySql5

    J'ai la procédure suivante qui est censé me mettre à jour des tuples dans une table.
    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
    DELIMITER $$
    CREATE PROCEDURE miseajour1()
    BEGIN
    DECLARE numVar varchar(3);
    DECLARE done int default 0;
    DECLARE mycursor CURSOR FOR SELECT LEFT(numero,3) FROM appel;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
     
    OPEN mycursor ;
    myloop : LOOP
    fetch mycursor into numVar;
    if done=1 LEAVE myloop; end if;
    UPDATE appel SET operateur = (SELECT idOperateur FROM operateur WHERE indicatif = num);
     
    end LOOP myloop;
    end $$
    La création se passe bien (sans erreur) mais l'execution me fait mouliner mon pc pendant des heures..... jusqu'a ce que je reboote ma machine.

    Est ce la requete de select dans l'update qui pose problème ?

    Si quelqu'un à un avis là dessus...

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Les SGBD sont optimisés pour des traitements en masse (ensemblistes). A l'inverse, un curseur travaille lgne par ligne et est toujours bcp + lent.

  3. #3
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Avez vous regardé les logs générés ??
    Car vous devez en avoir quelques uns !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE appel SET operateur = 
      (
       SELECT idOperateur 
       FROM 
            operateur 
         WHERE 
            indicatif = num);
    num ??
    Attention si indicatif=numVar (je suppose) vous ramene plusieurs résultats, cela risque de causer quelques soucis a votre SGBD.

    Et enfin, je plussois Antoun, la gestion de curseur est toujours pénalisante.

    Bon courage

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2003
    Messages : 52
    Par défaut
    Bonjour et merci pour vos réponse.

    Attention si indicatif=numVar (je suppose) vous ramene plusieurs résultats, cela risque de causer quelques soucis a votre SGBD
    pour le numVar c'est exact, un oubli de ma part...

    Et effectivment cela ramene plusieurs résultat et le queryBrowser explose...

    J'ai également vu qu'il est dangereux de mette à jour une table qui est parcourue par un curseur. Est correct ??

    Sinon voilà je passe le poste en résolu car il n'y a finalement pas de vrai problème. Encore merci pour vos remarques.

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par ythierrin
    J'ai également vu qu'il est dangereux de mette à jour une table qui est parcourue par un curseur. Est correct ??
    Oui, parce que les curseurs de MySQL sont asensibles, càd qu'ils sont parfois sur une vieille copie des données sans màj, et parfois en direct sur les vraies données.

    Plus largement, je dirais que l'utilisation de curseurs est en soi une erreur... Cf l'article de Fred "SQL pro" Brouard sur "Comment éviter les curseurs".

  6. #6
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Plus largement, je dirais que l'utilisation de curseurs est en soi une erreur... Cf l'article de Fred "SQL pro" Brouard sur "Comment éviter les curseurs".
    Pourrais tu me donner le lien svp ?
    merci

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

Discussions similaires

  1. [Res]Procédure stockée qui fait un insert basé sur un select
    Par wonderliza dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 18h25
  2. Procedures stockées qui appellent un autre ?
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/05/2005, 09h30
  3. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25
  4. Procedure stockée qui ne s'exe pas complètement
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/01/2005, 14h38
  5. Procedure stockée qui retourne un curseur
    Par kinaï dans le forum Débuter
    Réponses: 1
    Dernier message: 10/08/2004, 14h42

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