Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/06/2007, 12h10   #1
Nouveau Membre du Club
 
Inscription : août 2003
Messages : 52
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 52
Points : 37
Points : 37
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 :
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...
__________________
C'est au pied du mur que l'on voit le mieux le mur!!!!!
ythierrin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 23h05   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 03h31   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Avez vous regardé les logs générés ??
Car vous devez en avoir quelques uns !!

Code :
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
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 20h34   #4
Nouveau Membre du Club
 
Inscription : août 2003
Messages : 52
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 52
Points : 37
Points : 37
Bonjour et merci pour vos réponse.

Citation:
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.
__________________
C'est au pied du mur que l'on voit le mieux le mur!!!!!
ythierrin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 04h07   #5
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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".
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 08h24   #6
Membre chevronné
 
Avatar de pop_up
 
Inscription : avril 2006
Messages : 833
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 833
Points : 690
Points : 690
Citation:
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
pop_up est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2007, 18h09   #7
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
voici !
http://sqlpro.developpez.com/cours/s...r_avoidCursor/

attention, certains exemples sont du spécifique SQL Server.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h37.


 
 
 
 
Partenaires

Hébergement Web