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 :

Erreur (1064) lors de la compilation d'une fonction stockée


Sujet :

SQL Procédural MySQL

  1. #1
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut Erreur (1064) lors de la compilation d'une fonction stockée
    Bonjour,


    Je suis débutant en MySQL mais j'ai très une bonne connaissance de PL/SQL et d'Oracle.

    Je dois écrire une fonction qui vérifie le format d'un string.

    Lors de la "compilation" de cette fonction:
    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
     
    CREATE DEFINER=`root`@`localhost` FUNCTION `invoice_checkIsISRRefNr`(`refNr` VARCHAR(256))
    RETURNS tinyint(4)
    LANGUAGE SQL
    DETERMINISTIC
    NO SQL
    SQL SECURITY DEFINER
    COMMENT 'Verify if input parameter is a valid ref. nr for ISR'
    BEGIN
     
    DECLARE tmp VARCHAR(256);
     
    IF (tmp IS NULL) THEN
    RETURN FALSE;
     
    SET tmp = REPLACE(TRIM(refNr));
     
     
    RETURN TRUE;
     
    END
    Le serveur me retourne cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL Error (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 ');
     
     
        RETURN TRUE;
     
    END' at line 15
    J'utilise le programme HEIDI pour accéder au serveur.

    Qui pourrait m'aider à le trouve l'erreur?

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 55
    Points : 95
    Points
    95
    Par défaut
    Hello,

    Je crois que tu as deux erreurs :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BEGIN
    
    DECLARE tmp VARCHAR(256);
    
    IF (tmp IS NULL) THEN
       RETURN FALSE;
    Else
      SET tmp = REPLACE( TRIM(refNr), "A", " " );
    RETURN TRUE;
    End If ;
    
    END

    Tu n'avais pas de END IF (ton End est la fin de la fonction)
    et il manquait les paramètres nécessaires au replace (que j'ai mis au hasard).

  3. #3
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Merci Francis,

    Le code final est :
    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
     
    BEGIN
     
        DECLARE tmp VARCHAR(256); 
     
        IF (refNr IS NULL) THEN
           RETURN FALSE;
        END IF;
     
        SET tmp = REPLACE(TRIM(refNr), ' ', '');   
        IF NOT (tmp REGEXP '^[[:digit:]]{2,}') THEN
          RETURN FALSE;
        END IF;
     
        RETURN true;
     
    END
    Je me plaignais du manque de précision des messages retournés par le compilateur PL/SQL d'Oracle...

    Bonne journée

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/11/2009, 08h58
  2. ERREUR incompréhensible lors de la création d'une fonction
    Par BATAK dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/10/2009, 22h36
  3. Erreur #1064 lors d'une requête
    Par bigben89 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/06/2008, 11h59
  4. Réponses: 16
    Dernier message: 07/12/2007, 12h11
  5. Erreur PLSQL lors de l'execution d'une fonction
    Par chicken92000 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 17/03/2006, 17h12

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