我对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 ;
我做错了什么?
答案 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)
感谢您的建议。问题是你必须先声明每个变量才能进行任何查询。当然我也不应该在引号中加上数字。