it-swarm.com.ru

Объявление и использование переменных MySQL varchar

Я пытаюсь сделать несколько простых манипуляций с переменными в 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;

Я также попытался обернуть это с НАЧАТЬ ... КОНЕЦ; и как ПРОЦЕДУРА. В этом случае MySQL Workbench услужливо сообщает мне: «Ошибка синтаксиса SQL рядом с ')'» в первой строке и «Ошибка синтаксиса SQL рядом с 'DECLARE oldFOO varchar (7)'» во второй. В противном случае он выдает обе строки как ошибки полностью, с «ошибкой синтаксиса SQL рядом ...» на обеих.

Правка: я забыл упомянуть, что я пробовал с и без @s на переменных. Некоторые ресурсы имели это с, другие без.

Какую глупую ошибку я делаю?

20
Charles

Это прекрасно работает для меня, используя 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()
26
OMG Ponies

Я столкнулся с той же проблемой, используя 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;
6
Amos Long

Если вы используете phpmyadmin для добавления новой подпрограммы, не забывайте переносить код между BEGIN и END  enter image description here

0
Repky

В Mysql, мы можем объявить и использовать переменные с помощью команды set, как показано ниже

mysql> set @foo="manjeet";
mysql> select * from table where name = @foo;
0
minhas23

Похоже, вы забыли @ в объявлении переменной. Также я помню, что у меня были проблемы с 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;
0
rickythefox

попробуй это:

declare @foo    varchar(7),
        @oldFoo varchar(7)

set @foo = '138'
set @oldFoo = '0' + @foo
0
IWriteApps