Объявление и использование переменных MySQL varchar
Я пытаюсь сделать некоторые простые манипуляции с переменными в MySQL 5.0, но я не могу заставить его работать. Я видел много (очень!) различные syntaxen для declare/набор, я не уверен, почему... в любом случае я, по-видимому, путаю их/выбираю неправильный/смешиваю их.
вот минимальный фрагмент, который терпит неудачу:
DECLARE FOO varchar(7);
DECLARE oldFOO varchar(7);
SET FOO = '138';
SET oldFOO = CONCAT('0', FOO);
update mypermits
set person = FOO
where person = oldFOO;
Я также попытался обернуть его с помощью BEGIN... Конец; и как процедура. В этом случае MySQL Workbench услужливо сообщает мне: "синтаксическая ошибка SQL рядом ') '"в первой строке и "синтаксическая ошибка SQL рядом с 'DECLARE oldFOO varchar(7)'" во второй. В противном случае он дает обе строки как ошибки в полном объеме, с "синтаксической ошибкой SQL рядом ..."на обоих.
Edit: я забыл упомянуть, что я пробовал его с и без @s на переменных. Некоторые ресурсы имели его с собой, другие без.
какую глупую ошибку я делаю?
7 ответов
это отлично работает для меня, используя 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 ;
стол:
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()
я столкнулся с той же проблемой, используя MySQL Workbench. Согласно документация MySQL на DECLARE
"оператор объявляет локальные переменные в сохраненных программах."Это, по-видимому, означает, что он гарантированно работает только с хранимыми процедурами/функциями.
решение для меня было просто убрать DECLARE
оператор и введите переменную в SET
заявление. Для вашего кода это будет означать:
-- 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;
Похоже, вы забыли объявление переменной @ in. Также я помню, что у меня были проблемы с SET
в MySql давным-давно.
попробовать
DECLARE @FOO varchar(7);
DECLARE @oldFOO varchar(7);
SELECT @FOO = '138';
SELECT @oldFOO = CONCAT('0', @FOO);
update mypermits
set person = @FOO
where person = @oldFOO;
попробуйте это:
declare @foo varchar(7),
@oldFoo varchar(7)
set @foo = '138'
set @oldFoo = '0' + @foo
в Mysql мы можем объявлять и использовать переменные с командой set, как ниже
mysql> set @foo="manjeet";
mysql> select * from table where name = @foo;
Declare @variable type(size);
Set @variable = 'String' or Int ;
пример:
Declare @id int;
set @id = 10;
Declare @str char(50);
set @str='Hello' ;