J'essaie de faire quelques manipulations simples avec des variables dans MySQL 5.0 mais je n'arrive pas à le faire fonctionner. J'ai vu beaucoup (très!) Syntaxen différents pour DECLARE/SET, je ne sais pas pourquoi ... dans tous les cas, je les confondre/choisir le mauvais/les mélanger.
Voici un fragment minimal qui échoue:
DECLARE FOO varchar(7);
DECLARE oldFOO varchar(7);
SET FOO = '138';
SET oldFOO = CONCAT('0', FOO);
update mypermits
set person = FOO
where person = oldFOO;
J'ai aussi essayé de l'envelopper avec BEGIN ... END; et en tant que PROCEDURE. Dans ce cas, MySQL Workbench me dit utilement: "erreur de syntaxe SQL près de ')'" sur la première ligne et "erreur de syntaxe SQL près de" DECLARE oldFOO varchar (7) "" sur la seconde. Sinon, les deux lignes sont entièrement des erreurs, avec "erreur de syntaxe SQL proche de ..." sur les deux.
Edit: J'ai oublié de mentionner que je l'ai essayé avec et sans @s sur les variables. Certaines ressources ont eu avec, d'autres sans.
Quelle erreur stupide je fais?
Cela fonctionne très bien pour moi avec MySQL 5.1.35:
DELIMITER $$
DROP PROCEDURE IF EXISTS `example`.`test` $$
CREATE PROCEDURE `example`.`test` ()
BEGIN
DECLARE FOO varchar(7);
DECLARE oldFOO varchar(7);
SET FOO = '138';
SET oldFOO = CONCAT('0', FOO);
update mypermits
set person = FOO
where person = oldFOO;
END $$
DELIMITER ;
Table:
DROP TABLE IF EXISTS `example`.`mypermits`;
CREATE TABLE `example`.`mypermits` (
`person` varchar(7) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO mypermits VALUES ('0138');
CALL test()
J'ai rencontré le même problème avec MySQL Workbench. Selon la documentation MySQL , l'instruction DECLARE
"déclare les variables locales dans les programmes stockés". Cela signifie apparemment qu'il est uniquement garanti de travailler avec des procédures/fonctions stockées.
La solution pour moi consistait simplement à supprimer l'instruction DECLARE
et à introduire la variable dans l'instruction SET
. Pour votre code, cela voudrait dire:
-- DECLARE FOO varchar(7);
-- DECLARE oldFOO varchar(7);
-- the @ symbol is required
SET @FOO = '138';
SET @oldFOO = CONCAT('0', FOO);
UPDATE mypermits SET person = FOO WHERE person = oldFOO;
Dans Mysql, nous pouvons déclarer et utiliser des variables avec la commande set comme ci-dessous
mysql> set @foo="manjeet";
mysql> select * from table where name = @foo;
On dirait que vous avez oublié la déclaration @ dans la variable. De plus, je me souviens d'avoir eu des problèmes avec SET
dans MySql il y a longtemps.
Essayer
DECLARE @FOO varchar(7);
DECLARE @oldFOO varchar(7);
SELECT @FOO = '138';
SELECT @oldFOO = CONCAT('0', @FOO);
update mypermits
set person = @FOO
where person = @oldFOO;
essaye ça:
declare @foo varchar(7),
@oldFoo varchar(7)
set @foo = '138'
set @oldFoo = '0' + @foo