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 05/05/2008, 09h16   #1
Invité régulier
 
Inscription : juin 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 15
Points : 6
Points : 6
Par défaut erreur de syntaxe, mais comment faire?

bonjour a tous,

je débute un peu en procédure stocké. j'en ai deja fait un peu en cours sous postGreSQL, mais c'était il y a 2 ans, et depuis rien...

j'ai une erreur :

Code :
#1064 - Erreur de syntaxe près de 'INTEGER' à la ligne 4
voici mon code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE FUNCTION ajout_reservation (nb_place INTEGER, centr VARCHAR(50), semaine VARCHAR(3)) RETURNS INTEGER
BEGIN
 
	DECLARE dispo INTEGER;
	DECLARE maxi INTEGER;
 
	SELECT CONCAT('S',semaine) INTO dispo, CONCAT('S',semaine,'_max') INTO maxi
	FROM RESERVATION 
	WHERE CENTRE = centr;
 
          IF ((dispo + nb_place) < maxi) THEN
 
              UPDATE RESERVATION 
	      SET CONCAT('S',semaine) = CONCAT('S',semaine) + nb_place
              WHERE CENTRE = centr; 
 
	      RETURN 1;
 
	  ELSE
 
	      RETURN 0;
 
          END IF;
 
END
en fait, je gere des compteurs dans la table RESERVATION.

voila le genre de ligne de ma table:

centre1, S28, S28_max, S29, S29_max etc etc

Pour le centre1 on a un nombre de place dispo max pour la S28 (dans S28_max) et le nombre de place réservé ( dans S28).

voila pourquoi dans ma procédure j'ai en parametre le nom du centre, la semaine (uniquement le numero que je concatene), et le nombre de réservation a ajouter

des idées?

merci par avance!

Bastien
bastienh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2008, 16h45   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
DECLARE ne peut être utilisé dans un bloc BEGIN ... END, et doit intervenir au début de la routine, avant tout autre commande.
http://dev.mysql.com/doc/refman/5.0/fr/declare.html
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2008, 00h33   #3
Invité de passage
 
Inscription : mai 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 4
Points : 1
Points : 1
Par défaut La commande CHECK

Je vois que la commande CHECK ne fonctionne pas sur MySQL. Par quelle commande je peux la remplacer?
karimix10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2008, 14h43   #4
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Citation:
Envoyé par karimix10 Voir le message
Je vois que la commande CHECK ne fonctionne pas sur MySQL. Par quelle commande je peux la remplacer?
La contrainte CHECK est admise par MySQL mais pas appliqué.
Je ne pense pas que t'ai d'autres choix que de poser un trigger sur l'insert de la table.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 10h47   #5
Membre à l'essai
 
Femme Sandrine
Développeur informatique
Inscription : août 2005
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Sandrine
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : août 2005
Messages : 29
Points : 23
Points : 23
Par défaut Rectificatif : DECLARE

Citation:
DECLARE ne peut être utilisé dans un bloc BEGIN ... END, et doit intervenir au début de la routine, avant tout autre commande.
http://dev.mysql.com/doc/refman/5.0/fr/declare.html

En fait, il y a une erreur dans la traduction :
http://dev.mysql.com/doc/refman/5.0/en/declare.html
Citation:
DECLARE is allowed only inside a BEGIN ... END compound statement and must be at its start, before any other statements.
c'est-à-dire que DECLARE est obligatoirement dans un BEGIN ... END, mais avant toute autre commande.
spg40 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 00h47.


 
 
 
 
Partenaires

Hébergement Web