声明并使用MySQL varchar变量

时间:2010-10-20 19:11:29

标签: sql mysql mysql-error-1064

我正在尝试使用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包裹它......结束;并作为程序。在这种情况下,MySQL Workbench有助于告诉我:第一行上的“SQL语法错误')'”和第二行上的“DECLARE oldFOO varchar(7)'附近的SQL语法错误”。否则它会将两行都作为完整错误,两者都有“SQL语法错误接近...”。

编辑:我忘了提到我在变量上使用和不使用@s都尝试过。有些资源有,有些没用。

我犯了什么愚蠢的错误?

7 个答案:

答案 0 :(得分:28)

这对我使用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()

答案 1 :(得分:6)

我使用MySQL Workbench遇到了同样的问题。根据{{​​3}},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;

答案 2 :(得分:0)

看起来你忘记了变量声明中的@。我还记得很久以前在MySql中遇到SET的问题。

尝试

DECLARE @FOO varchar(7);
DECLARE @oldFOO varchar(7);
SELECT @FOO = '138';
SELECT @oldFOO = CONCAT('0', @FOO);

update mypermits 
   set person = @FOO 
 where person = @oldFOO;

答案 3 :(得分:0)

试试这个:

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

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

答案 4 :(得分:0)

在Mysql中,我们可以使用set命令声明和使用变量,如下所示

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

答案 5 :(得分:0)

如果您使用phpmyadmin添加新例程,请不要忘记将代码包装在BEGIN和END enter image description here之间

答案 6 :(得分:-1)

Declare @variable type(size);

Set @variable = 'String' or Int ;

示例:

 Declare @id int;
 set @id = 10;

 Declare @str char(50);
 set @str='Hello' ;