MySQL存储过程不工作
我是MySQL存储过程的新手,遇到以下错误: 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“DECLARE v_lang TINYINT(1)DEFAULT“1”附近使用的正确语法;在第7行为选择“l”声明游标 尝试生成此存储过程时:MySQL存储过程不工作,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我是MySQL存储过程的新手,遇到以下错误: 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“DECLARE v_lang TINYINT(1)DEFAULT“1”附近使用的正确语法;在第7行为选择“l”声明游标 尝试生成此存储过程时: DELIMITER // CREATE PROCEDURE UpdateUser(IN p_uid INT(11)) BEGIN DECLARE v_last_login TIMESTAMP DEFAULT '20
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 ;
我做错了什么?您确定可以使用字符串作为数字变量的默认值吗 试一试
您确定可以使用字符串作为数字变量的默认值吗 试一试
你不应该这样做吗
DECLARE v_lang TINYINT(1) DEFAULT 1;
而不是
DECLARE v_lang TINYINT(1) DEFAULT '1';
你不应该这样做吗
DECLARE v_lang TINYINT(1) DEFAULT 1;
而不是
DECLARE v_lang TINYINT(1) DEFAULT '1';
谢谢你的建议。问题是,在执行任何查询之前,必须声明每个变量。当然,我也不应该把数字加引号。谢谢你的建议。问题是,在执行任何查询之前,必须声明每个变量。当然,我也不应该在引号中加数字。问题是在进行任何查询之前必须声明每个变量问题是在进行任何查询之前必须声明每个变量感谢Dualthlon的更新。这真的应该是对GregHNZ或Frankline的回答的评论——因为他们正确地回答了这个问题。请记住给他们打勾和/或投票!谢谢你的更新,Dualthlon。这真的应该是对GregHNZ或Frankline的回答的评论——因为他们正确地回答了这个问题。请记住给他们打勾和/或投票!