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 :

Problème de déclarations de variables dans une procédure mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut Problème de déclarations de variables dans une procédure mysql
    Bonjour,

    J'ai vu plusieurs postes traitant de ce sujet sur le forum mais malheureusement aucun n'allait assez loin dans la solution proposée.

    J'ai une procédure stockée qui fait appel à un curseur.

    DELIMITER //
    CREATE PROCEDURE debou_abrev ()
    DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation;
    BEGIN
    for enreg in cabrev
    loop
    update clients, abreviation
    set clients.adr2=REPLACE(clients.adr2,abreviations,correction);
    end loop;
    END //;

    Comme j'ai lu sur différents postes que le problème pouvait être lié à des délimiteurs j'ai même mis en place cette évolution sur ma procédure.

    Mais même dans ce cas elle ne fonctionne toujours pas. Le message d'erreur (selon l'interpreteur de ligne de commande de mysql 5.0.24) est:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
    corresponds to your MySQL server version for the right syntax to use near 'DECLA
    RE cabrev CURSOR FOR select abreviations,correction from abreviation;
    BEGIN' at line 2.

    Ce que juge de ce message d'erreur, c'est qu'il n'arrive pas à interpréter la commande declare.

    J'espère que quelqu'uns saura m'apporter la solution.

    Merci d'avance,

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    Le moins qu'on puisse dire c'est que ta syntaxe n'est pas très catholique (DECLARE avant le BEGIN et boucle for bizarre...)

    Regarde ici pour un exemple d'utilisation des curseurs : http://dev.mysql.com/doc/refman/5.0/en/cursors.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    La boucle for utilisé c'est typiquement de l'oracle.
    Pour l'histoire du begin après la déclaration de mon curseur c'est une info que j'ai lu sur un autre poste.

    Effectivement pour avoir modifié la syntaxe de du begin et du declare, je n'ai plus l'erreur j'en ai une autre lié à ma boucle for.

    Il faut toujours modifié une chose à la foix pour identifier un problème !!!!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Je reviens à la charge avec quelque chose de tout bête.
    Le create procedure exécute t-il cette derniere ?
    Y a t'il une commande à lancer pour ensuite execute cette procédure ?

  5. #5
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par beberd
    Le create procedure exécute t-il cette derniere ?
    Non. En ce qui concerne l'exécution tout est précisé dans la doc

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Merci maximilian,

    En même temps dans la doc il dise de lancer un call nom_procedure et sa fonctionne.

    En locurrence dans mon cas sous l'interpreteur de commande de mysql quand j'ouvre le call et que je met derrière le nom de ma procédure ; le prompt ne se ferme pas c'est comme si il attendait un paramètre en entrer.
    Mais ni en entrer, ni en sortie je n'utilise de variables.

    DELIMITER //
    CREATE PROCEDURE dedou_abrev ()
    BEGIN
    DECLARE a VARCHAR(10);
    DECLARE b VARCHAR(50);
    DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation;
    open cabrev;
    loop
    fetch cabrev into a,b;
    update clients
    set clients.adr2=REPLACE(clients.adr2,a,b);
    end loop;
    END //

    Pour expliquer le but de cette procédure; c'est de modifier dans un champs adresse les abréviations utilisés par certains clients.

  7. #7
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par beberd
    En locurrence dans mon cas sous l'interpreteur de commande de mysql quand j'ouvre le call et que je met derrière le nom de ma procédure ; le prompt ne se ferme pas c'est comme si il attendait un paramètre en entrer.
    Tu as saisi le délimiteur derrière ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    effectivement c'est mieux!!!
    par contre ce que je ne comprends pas c'est pourquoi il ne se passe rien?

    ERROR 1329 (02000): No data - zero rows fetched, selected, or processed

    DELIMITER //
    CREATE PROCEDURE dedou_abrev ()
    BEGIN
    DECLARE a VARCHAR(10);
    DECLARE b VARCHAR(50);
    DECLARE cabrev CURSOR FOR select abreviations,correction from abreviation;
    open cabrev;
    loop
    fetch cabrev into a,b;
    update clients
    set clients.adr2=REPLACE(clients.adr2,a,b);
    end loop;
    END //

    elle devrait en toute logique modifier le champs adresse dans la table clients en prenant pour paramètre chaque valeur de la table abreviation

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Merci maximilian pour toutes ses informations !!!
    Le problème est résolu, il me reste plus qu'à pirater la poste pour trouver toutes les abréviations existantes dans le monde

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

Discussions similaires

  1. déclaration des variables dans une procédure ou fonction
    Par guefrachi dans le forum Débuter
    Réponses: 6
    Dernier message: 23/07/2010, 13h27
  2. Déclaration de variables dans une procédure stockée
    Par jbrasselet dans le forum Développement
    Réponses: 5
    Dernier message: 16/02/2009, 09h00
  3. Problème de variable dans une procédure
    Par 4rocky4 dans le forum VBA Access
    Réponses: 6
    Dernier message: 31/01/2008, 10h15
  4. Problème d'envoie de variables dans une url
    Par xenos dans le forum Langage
    Réponses: 9
    Dernier message: 28/11/2006, 23h48
  5. Réponses: 9
    Dernier message: 31/01/2006, 09h04

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