MySQL存储过程不起作用

时间:2012-03-23 08:04:47

标签: mysql sql stored-procedures

我对MySQL存储过程很新,并且出现以下错误:

  

1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'DECLARE v_lang TINYINT(1)DEFAULT'1'附近使用正确的语法; DECLARE cursor_lang CURSOR FOR SELECT'在第7行

尝试构建此存储过程时:

DELIMITER //
CREATE PROCEDURE UpdateUser(IN p_uid INT(11))
BEGIN

DECLARE v_last_login    TIMESTAMP   DEFAULT '2012-01-01 00:00:00' ;
SELECT `last_login`  INTO v_last_login FROM `user` WHERE `id`= p_uid;

DECLARE v_lang  TINYINT(1)  DEFAULT '1';

DECLARE cursor_lang CURSOR FOR SELECT `l_id` INTO v_lang FROM `user_lang` WHERE `user_id` = p_uid LIMIT 0 , 5;

DECLARE no_more_l   TINYINT(1)  DEFAULT 0;
DECLARE  CONTINUE HANDLER FOR NOT FOUND SET  no_more_l = 1;

OPEN cursor_lang;

FETCH  cursor_lang INTO v_lang_str;
REPEAT 

UPDATE user SET `last_login`=CURRENT_TIMESTAMP() WHERE `id`=p_uid AND `l_id` = v_lang_str;

 UNTIL  no_more_l = 1
 END REPEAT;
 CLOSE  cursor_lang;

END //
DELIMITER ;

我做错了什么?

3 个答案:

答案 0 :(得分:2)

你确定可以使用字符串作为数字变量的默认值吗?

尝试

DECLARE v_lang  TINYINT(1)  DEFAULT 1;

答案 1 :(得分:2)

你不应该这样做吗

DECLARE v_lang  TINYINT(1)  DEFAULT 1;

而不是

DECLARE v_lang  TINYINT(1)  DEFAULT '1';

答案 2 :(得分:0)

感谢您的建议。问题是你必须先声明每个变量才能进行任何查询。当然我也不应该在引号中加上数字。