Bonjour,
Avec Mac OSX et mysql de MAMP (appli. apache, mysql ..) je cherche à créer une procédure dont le texte suit :
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
23
24
25
26
27
28
29
30
31
32
33 DELIMITER ; DROP PROCEDURE IF EXISTS Procedure_1; DELIMITER !! CREATE PROCEDURE Procedure_1 (date_debut DATE, date_fin DATE) BEGIN DECLARE variable_1 SMALLINT UNSIGNED DEFAULT 1; DECLARE variable_2 DATE; DECLARE variable_3 SMALLINT UNSIGNED DEFAULT 1; DECLARE variable_4 VARCHAR (64); DECLARE variable_5 SMALLINT UNSIGNED DEFAULT 1; DECLARE variable_6 SMALLINT UNSIGNED DEFAULT 1; TRUNCATE TABLE Table_1; TRUNCATE TABLE Table_2; SET variable_2 = date_debut; WHILE variable_2 < date_fin DO TRUNCATE TABLE Table_2; INSERT INTO Table_2 SELECT Ville FROM Base_Ville WHERE Base_Ville.date = variable_2 GROUP BY Ville; SET variable_6 = 1; SELECT COUNT(*) INTO variable_5 FROM Table_2; WHILE variable_6 < variable_5 DO SELECT Ville INTO variable_4 FROM Table_2 LIMIT 1 OFFSET variable_6; SELECT MAX(Col_1) INTO variable_3 FROM Base_Ville WHERE date = variable_2 AND Ville = variable_4; WHILE variable_1 < variable_3 DO REPLACE INTO Table_1 SELECT * FROM Base_Ville WHERE Base_Ville.Col_1 = variable_1 AND Base_Ville.date = variable_2 AND Base_Ville.Ville = variable_4 ; SET variable_1 = variable_1 + 1; END WHILE; SET variable_6 = variable_6 + 1; END WHILE; SET variable_1 = 1; SET variable_2 = variable_2 + 1; END WHILE; END !! DELIMITER ;
Que je rentre cette procedure directement dans le client texte (ligne à ligne par des copier-coller ou par :
mysql > source ~/Procedure_1.txt
Je recois la même erreur :
Si la ligne qui semble être en défaut est remplacée par la suivante, le résultat est le même :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERROR 1064 (42000): 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 'numero_ville; SELECT MAX(Col_1) INTO variable_3 FROM Base_Ville WHERE da' at line 18
SELECT Ville INTO variable_4 FROM Table_2 LIMIT variable_6, 1;
Par contre si je mets la suivante :
SELECT Ville INTO variable_4 FROM Table_2 LIMIT 1, 1;
La procedure est alors bien crée et lorsque testée, le résultat voulu (de cette procédure modifiée) est obtenu.
Mais j'ai besoin de faire varier l'offset' de la clause LIMIT par une variable lors de l'exécution de la boucle.
Quelqu'un saurait-il pourquoi le création de ma requete est rejetée. Et/ou quelqu'un sait-il comment résoudre ce problème.
Par avance merçi.
Partager