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 création procédure


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Problème création procédure
    Bonjour,

    Bonjour à tous et merci d'avance à ceux qui prendront le temps de me répondre.

    Voici mon problème, je développe actuellement un logiciel en C++ s'appuyant sur une Base de Données réalisée via MySQL. Pour la nouvelle fonctionnalité que je développe j'ai besoin d'implémenter une procédure dans ma Base de Données.

    Voici donc une partie du Code que j'ai réalisé (en version simplifiée).
    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
    18
    19
    20
    21
    22
    DELIMITER |
     
    CREATE PROCEDURE recuperer_defauts(IN p_pos_x DOUBLE, IN p_pos_y DOUBLE, IN p_pos_z DOUBLE, IN sens VARCHAR(10))
     
      BEGIN
     
        DECLARE IdxInf_x INT;
               .
               . (Multiples déclarations)
               .
        IF (sens = 'x')
           SELECT ID_Xtheo INTO IdxInf_x FROM defx_xtheo WHERE Xtheo < p_pos_x ORDER BY Xtheo DESC LIMIT 1
               .
               . (Suite de la Procédure)
               .
        END IF;
        .
        . (Suite de la Procédure)
        .
      END|
     
    DELIMITER ;
    Ce code est enregistré au bon endroit dans un fichier nommé "testProcedure.sql".

    Je n'arrive pas à trouver mon erreur et pourtant lorsque je lance la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SOURCE testProcedure.sql
    dans mon invite de commande je reçois le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 'SELECT ID_Xtheo INTO IdxInf_x FROM defx_xtheo WHERE Xtheo < p_pos_x ORDER BY Xth' at line 74
    Voila... Quelqu'un peut il m'ouvrir les yeux sur mon erreur de Syntaxe, je m'arrache les cheveux pour la trouver depuis hier, mais rien ne me vient...

    Encore une fois merci d'avance à tout ceux qui prendront le temps de me répondre.

    Cordialement,

    Nergal

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut Réponse
    Bonjour,

    Lorsqu'on a une erreur de requête dans une procédure, c'est assez facile de tester, il suffit de l'essayer dans un Query Browser.

    Dans ton cas, ce qui ne semble pas correct c'est le ORDER BY, tu veux trier les résultats en fonction des valeurs d'une colonne... Que tu ne ramène pas.

    Il faudrait faire peut être (je ne peux pas tester):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID_Xtheo INTO IdxInf_x, Xtheo  FROM defx_xtheo WHERE Xtheo < p_pos_x ORDER BY Xtheo DESC LIMIT 1
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Tout d'abord, merci pour ta réponse.

    En effet, je vois ce que tu veux mettre en évidence, cependant cela me pose deux petits soucis.

    Tout d'abord, j'ai testé la ligne de commande qui pose problème directement dans l'invite de commande Windows de la façon suivante en remplaçant mes variables par des variables utilisateurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET @p_pos_x = 10.4;
    SET @IdxInf_x = 0;
     
    SELECT ID_Xtheo INTO @IdxInf_x FROM defx_xtheo WHERE Xtheo < @p_pos_x ORDER BY Xtheo DESC LIMIT 1;
    La commande s’exécute sans aucun soucis et ma variable prend bien la valeur attendue, ce qui me pousse à croire que ma syntaxe est peut être correcte sans faire le changement que tu proposes.

    Le deuxième soucis que me pose ta proposition vient du faites que je désire exécuter ma procédure à partir de mon logiciel développé en C++ grâce à la commande mysql_query(). Pour ce faire je souhaitais donc ne faire appelle à aucune commande SELECT susceptible d'afficher des résultats à l'écran à part en toute fin de Procédure où j'aurais effectué la commande SELECT NomDeMaVariableAvecLeResultatDesiré afin d'en récupérer le contenu dans mon programme via la fonction mysql_store_result().

    Or avec la ligne de commande que tu proposes, il me semble que la colonne "XTheo" s'affichera à l'écran lors du premier SELECT. Cela ne risque t'il pas de me poser problème pour récupérer les données qui m'intéressent?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous!

    Personne d'autre n'aurait une petite idée sur la question?

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je dirais qu'il manque simplement le THEN après le IF...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Et tu as totalement raison Je venais juste de résoudre mon problème au moment où tu m'as répondu, je te remercie tout de même!

    Une nouvelle question se pose maintenant à moi...

    Est il possible de déclarer ma procédure dans ma base de données à partir de mon programme réalisé en C++ à travers l'utilisation de la fonction my_sql_query()? Etant donné que cette fonction ne peut traiter qu'une requête à la fois, est ce que la création de la procédure qui contient de nombreux delimiteur ";" ne risque pas de poser un problème?

Discussions similaires

  1. Probléme de création procédure d'installation
    Par karim15 dans le forum WinDev
    Réponses: 1
    Dernier message: 11/03/2013, 14h08
  2. Problème création d'une procédure stockée
    Par kaouane dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 09/12/2010, 09h41
  3. Problème création procédure dans un schéma
    Par mercure07 dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 11/02/2009, 14h01
  4. Problème Création Procédure
    Par Yndigos dans le forum Oracle
    Réponses: 6
    Dernier message: 08/07/2006, 09h02
  5. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42

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