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 :

Curseur ne fonctionne pas avec Mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Curseur ne fonctionne pas avec Mysql
    Bonjour,
    j'essaye d'exécuter cet simple exemple d'une procédure ayant un curseur, le problème est que le résultat me selectionne un seul nom!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE PROCEDURE retrouverNom1(IN profession VARCHAR(9), OUT nom VARCHAR(10)) 
    BEGIN
    DECLARE  emp_name  VARCHAR(30); 
    DECLARE curseur CURSOR FOR SELECT ename FROM emp WHERE job = profession; 
    OPEN curseur; 
    FETCH curseur INTO nom ;
    CLOSE curseur;
    END$$
    DELIMITER ;
    CALL retrouverNom1('MANAGER', @nom);
    SELECT @nom;
    j'exécute ça sur Mysql en utilisant sqlYog quelqu'un vois le problème?
    merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    La procédure ne te renvoie qu'un nom, et c'est parfaitement normal, puisque tu n'as qu'un paramètre en sortie (OUT).
    A priori, c'est même le dernier nom rencontré lors du balayage du curseur...

    Il semble que tu souhaites en retour tout un ensemble de données ?

    Je ne suis pas certain que l'utilisation d'une procédure soit adaptée

    Tu peux peut-être utiliser en retour un paramètre en format TEXT que tu remplis dans le fetch en concaténant les occurrences trouvées; mais sans garantie !

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    Si... mais un curseur n'est qu'un pointeur de lecture qui bouge d'un cran vers l'avant à chaque fetch faut peut-être envisager de faire UNE BOUCLE DE LECTURE NON?

    Tu défini des variables qui te servent à rien (je suppose que ça vient de différents tests) et tu as des longueurs de chaines de caractères très variées (9,10,30)...
    De plus, une variable ne peut contenir un set de données mais juste un type scalaire (nombres, booléens ou chaines de caractères)...

    En plus, pourquoi, si tu veux juste afficher ton set de résultat tu fais pas un simple select à la place du curseur dans la procédure?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELIMITER $$
    CREATE PROCEDURE retrouverNom1(IN profession VARCHAR(9)) 
    BEGIN
    SELECT ename FROM emp WHERE job = profession;
    END$$
    DELIMITER ;

    Si tu dois exploiter tes résultats encore en mysql tu peux les concaténer pendant ta boucle de lecture avec un séparateur dans une variable de type texte

    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
    DELIMITER $$
    CREATE PROCEDURE retrouverNom1(IN profession VARCHAR(9), OUT retour text) 
    BEGIN
    declare done bool DEFAULT false;
    DECLARE  emp_name  VARCHAR(30); 
    DECLARE curseur CURSOR FOR SELECT ename FROM emp WHERE job = profession;
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 
    OPEN curseur; 
    repeat
    FETCH curseur INTO emp_name;
    if NOT done then
    set retour=concat_ws(";",retour,emp_name);
    end IF;
    until done end repeat;
    CLOSE curseur;
    END$$
    DELIMITER ;

Discussions similaires

  1. [WD19] hchangeconnexion ne fonctionner pas avec base mysql
    Par ecoinfo dans le forum WinDev
    Réponses: 6
    Dernier message: 14/12/2014, 23h49
  2. [10gR2] Order by ne fonctionne pas avec un curseur
    Par Loko dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/09/2014, 09h39
  3. evenement onclick ne fonctionne pas avec explorer??
    Par nath-0-0 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 12h13
  4. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  5. window.resizeTo ne fonctionne pas avec firefox?
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 15h07

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