代码之家  ›  专栏  ›  技术社区  ›  Charles

声明和使用MySQL varchar变量

  •  21
  • Charles  · 技术社区  · 14 年前

    我试图用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 syntax error near')”,在第二行告诉我“DECLARE oldFOO varchar(7)”附近的SQL syntax error。否则,它会将这两行全部作为错误给出,并在这两行上显示“SQL语法错误接近…”。

    我犯了什么愚蠢的错误?

    7 回复  |  直到 14 年前
        1
  •  29
  •   OMG Ponies    14 年前

    使用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
  •  7
  •   MikeyE    7 年前

    我在使用MySQL工作台时遇到了同样的问题。根据 MySQL documentation ,和 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
  •  0
  •   rickythefox    14 年前

    你好像忘了变量声明中的@。我还记得有问题 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;
    
        4
  •  0
  •   IWriteApps    14 年前

    试试这个:

    declare @foo    varchar(7),
            @oldFoo varchar(7)
    
    set @foo = '138'
    set @oldFoo = '0' + @foo
    
        5
  •  0
  •   minhas23    9 年前

    mysql> set @foo="manjeet";
    mysql> select * from table where name = @foo;
    
        6
  •  0
  •   Repky    8 年前

    如果使用phpmyadmin添加新的例程,那么不要忘记在开始和结束之间包装代码 enter image description here

        7
  •  -1
  •   Math    10 年前
    Declare @variable type(size);
    
    Set @variable = 'String' or Int ;
    

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