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