2015-06-09 84 views
1

当我写了一个小的代码块(后来在MySQL中的情况下使用,但声明时一个看似标准的整型变量,我得到一个错误:MySQL的 - 错误声明变量

BEGIN 
     DECLARE myvar INT; 
     SELECT TIMESTAMPDIFF INTO myvar (MINUTE,(select user_hb_stamp from eclipse_users where username = 'user1'),(SELECT NOW())); 

     IF (myvar > 5) 
      UPDATE eclipse_users SET logged=0 WHERE username = 'user1'; 
END 

我正在提前做错了

感谢

+0

您可能在开始时缺少分隔符。 ''定界符//',以便任何';'不被解释为代码块的结束。 –

+1

你把ms sql server弄乱了。 – i486

回答

1

select声明的格式不正确试试这个:。

SELECT myvar := TIMESTAMPDIFF(MINUTE, 
           (select user_hb_stamp from eclipse_users where username = 'user1'), 
           NOW()); 

虽然你可以变量使用into,我宁愿直接设置它们 - 除非你正在编写需要与Oracle兼容的代码。 (。然后所有的函数调用将无法正常工作)

一个写这个比较典型的方式是:

SELECT myvar := TIMESTAMPDIFF(MINUTE, user_hb_stamp, NOW()) 
    FROM eclipse_users 
    WHERE username = 'user1'; 

编辑:

对于declare本身,问题可能是缺少delimiter声明。请尝试:

delimiter $$ 

create procedure . . . 
begin 
    declare p_myvar int; 

    select p_myvar := TIMESTAMPDIFF(MINUTE, user_hb_stamp, NOW()) 
    from eclipse_users 
    where username = 'user1'; 

    . . . 
end$$ 
delimiter ;