MySQL创建插入记录存储过程触发语法错误问题求助
存在的语法错误
- 两次提交的代码都存在存储过程名使用单引号包裹的问题:MySQL 中表名、存储过程名这类标识符需要用反引号(`)包裹,单引号仅用于标记字符串内容,会直接触发语法报错
- 初始版本的INSERT语句的列名列表、VALUES列表末尾多了多余的逗号
- MySQL 不存在
@@ERROR系统变量,该变量是SQL Server的专属语法,MySQL 可以通过ROW_COUNT()函数判断DML语句执行影响的行数,也可以通过DECLARE HANDLER捕获执行异常 - 初始版本中所有SQL语句末尾缺少分号结束符,包括INSERT语句、IF分支里的SET语句
- 初始版本的IF分支语句缺少
END IF关键字闭合 - 混淆了OUT参数和用户变量:你定义的OUT参数是
result,直接赋值即可,加上@前缀的是会话级用户变量@result,和你定义的OUT参数不是同一个变量 - 存储过程不支持
RETURN语句,RETURN仅可用于自定义函数,存储过程通过OUT参数天然返回结果,不需要额外RETURN - 第二次调整后的代码额外缺少INSERT语句末尾的分号结束符
修正后的完整代码(包含执行结果返回逻辑)
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `login_insert`( IN uname VARCHAR(20), IN paword VARCHAR(20), OUT result INT ) BEGIN -- 初始默认赋值为执行失败 SET result = 5; INSERT INTO db1.login_tab (username, pword) VALUES (uname, paword); -- 判断插入是否成功 IF ROW_COUNT() > 0 THEN SET result = 0; END IF; END$$ DELIMITER ;
简化版本(不需要返回执行结果可直接使用)
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `login_insert`( IN uname VARCHAR(20), IN paword VARCHAR(20) ) BEGIN INSERT INTO db1.login_tab (username, pword) VALUES (uname, paword); END$$ DELIMITER ;
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

