Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 10h20   #1
Membre Expert
 
Homme Fabio
Développeur Java
Inscription : octobre 2002
Messages : 1 348
Détails du profil
Informations personnelles :
Nom : Homme Fabio
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2002
Messages : 1 348
Points : 1 824
Points : 1 824
Envoyer un message via Skype™ à jowo
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 :
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 :
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?
__________________
Bien le bonjour chez vous
Jowo
jowo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 18h50   #2
Membre régulier
 
Homme Francis Lennert
Développeur informatique
Inscription : novembre 2011
Messages : 52
Détails du profil
Informations personnelles :
Nom : Homme Francis Lennert
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : novembre 2011
Messages : 52
Points : 86
Points : 86
Hello,

Je crois que tu as deux erreurs :
Code SQL :
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).
Grandal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 07h45   #3
Membre Expert
 
Homme Fabio
Développeur Java
Inscription : octobre 2002
Messages : 1 348
Détails du profil
Informations personnelles :
Nom : Homme Fabio
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2002
Messages : 1 348
Points : 1 824
Points : 1 824
Envoyer un message via Skype™ à jowo
Merci Francis,

Le code final est :
Code :
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
__________________
Bien le bonjour chez vous
Jowo
jowo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h40.


 
 
 
 
Partenaires

Hébergement Web