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 :

Procédure stockée : erreur de création


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
    Juin 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Par défaut Procédure stockée : erreur de création
    Bonjour,

    J'essaie de créer une procédure stockée simple mais à chaque fois, j'ai le message d'erreur suivant :
    requête SQL:
    CREATE PROCEDURE TESTX( IN nomp varchar( 60 ) ) BEGIN SELECT count( * )
    FROM personne
    WHERE nom = nomp
    END
    MySQL a répondu:
    #1064 - 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 count(*) from personne where nom=nomp
    END' at line 3

    NB : j'ai essayé en ajoutant un ; après l'instruction select -> même résultat
    J'ai essayé de créer la procédure en ne mettant rine entre le begin et le end et là cela passe.

    Merci de em conseiller,

    JS

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Je crois pas qu'il y a de IN dans les paramètres.

  3. #3
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Le problème est que la requête que fait la procédure doit se terminer par un ';'. Hors c'est le délimiteur par défaut du client qui va donc interpréter le code jusqu'au ';' si on en met un, et sans le END final ça n'a pas de sens non plus.

    Bref, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DELIMITER //  -- on prend '//' comme délimiteur temporaire
     
    CREATE PROCEDURE TESTX( IN nomp varchar( 60 ) )
    BEGIN
       SELECT count( * )
       FROM personne
       WHERE nom = nomp;
    END //
     
    DELIMITER ;   -- on reprend ';'

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Par défaut cela ne vient pas du IN
    Le "IN" sert normalement à spécifier que le paramètre est un paramètre d'entrée mais même en l'enlevant, cela ne fonctionne pas

    D'ailleurs cette procédure toute simple ne passe pas :
    create proc test()
    BEGIN
    select count(*) from personne;
    END

    #1064 - 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 'proc test()

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Par défaut
    Dans mon post précédent, il fallair bien sûr lire create procedure.

    Quant au delimiter, j'ai fait un copier / coller de ton code mais sans plus de succès.

    D'ailleur sle code ci-dessous ne fonctionne pas non plus :
    create procedure vv1()
    begin
    declare b int;
    end

    Alors que si j'enlève le declare, cela marche !

  6. #6
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par jeromesteffe
    Quant au delimiter, j'ai fait un copier / coller de ton code mais sans plus de succès.
    Ca dit quoi ?

    Sinon, quel client utilises-tu ? Les clients ne sont pas tous créés égaux et certains on vraiment du mal dans certains cas, création de procédures en tête. Je me suis déjà bien pris la tête avec MySQL Query Browser par exemple.

    Mon code passe avec le bon vieux client ligne de commande qui a le mérite d'être vraiment fiable :
    Citation Envoyé par MySQL
    Server version: 5.0.27-community-nt-log MySQL Community Edition (GPL)

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> DELIMITER // -- on prend '//' comme dlimiteur temporaire
    mysql>
    mysql> CREATE PROCEDURE TESTX( IN nomp varchar( 60 ) )
    -> BEGIN
    -> SELECT count( * )
    -> FROM personne
    -> WHERE nom = nomp;
    -> END //
    Query OK, 0 rows affected (0.00 sec)

    mysql>
    mysql> DELIMITER ; -- on reprend ';'
    mysql>
    Et pourtant je n'ai pas de table "personne"

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Par défaut
    Merci pour ces conseils ...
    Effectivement, j'utilisais la commande SQL directement à partir de phpmyadmin et le fait de passer par le client en ligne a supprimé le pb.

    Par contre, j'ai installé WAMPSERVER mais je n'ai pas trouvé où démarrer MYSQL QUERY BROWSER.
    Où peut-on le démarrer ?

    D'avance merci,

    JS

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

Discussions similaires

  1. [Procédure stocké] Erreur d'execution VB.
    Par GarsDuCalvados dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/07/2007, 11h21
  2. [procédure stockée] Erreur dans un while
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/06/2007, 16h46
  3. Réponses: 7
    Dernier message: 03/05/2007, 12h44
  4. Création de procédure stocké erreur
    Par ran_hery dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/02/2007, 09h39
  5. [Procédure stockée] Erreur 1305
    Par SSJ17Vegeta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 18/11/2005, 02h38

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