2015-06-09 51 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 ;