mysql存储过程,我做了一个简单的,为甚麽总是出错?? 400 报错
功能:写一个存储过程:同时增加一条学生基本信息和该学生2门课程成绩;
代码:CREATE PROCEDURE pro_insert(in p VARCHAR)BEGIN
DECLARE v1 VARCHAR
SET v1=p
INSERT INTO student1(id) VALUES(v1);
END
CALL pro_insert(1)
SELECT * FROM student1;
错误截图:
Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
BEGIN
DECLARE v1 VARCHAR
SET v1=p
INSERT INTO student1(id) VALUES(v1);
' at line 1
字符集的问题,估计你的客户端与server的字符集不一致
drop procedure if exists pro_insert; delimiter // CREATE PROCEDURE pro_insert(in p VARCHAR(255) CHARSET utf8) BEGIN DECLARE v1 varchar(255) CHARACTER SET utf8; SET v1=p; INSERT INTO student1(id) VALUES(v1); END // delimiter ;
SET v1=p
你还问为什么老出错,我说为啥不出错,你看看你的语法正确吗,sql语句后面的分隔符呢,默认都是; 你这两句和insert 一起合并成一句sql,你觉得正常吗
######回复 @飞天小猪猪 : 我靠你把上面语句全写在一起了?######我把两个分割符加上后和原来得报错提醒一样###### ###### VARCHAR要指明宽度,要在前面声明语句的结束符号######看下边######字符集的问题,估计你的客户端与server的字符集不一致
drop procedure if exists pro_insert; delimiter // CREATE PROCEDURE pro_insert(in p VARCHAR(255) CHARSET utf8) BEGIN DECLARE v1 varchar(255) CHARACTER SET utf8; SET v1=p; INSERT INTO student1(id) VALUES(v1); END // delimiter ;
是这个吗?不行啊
######因为你太笨######你在检查下自己的存储过程语法,至少SQLServer不是这样的,首行要有as关键字, https://msdn.microsoft.com/zh-cn/library/ms187926.aspx######我用的mysql,还是要谢谢你######delimiter //
delimiter ;
很多时候,是这2句的问题,一般都要先重定义语义结束符,默认是";",先重定义成 "//",用完之后,再换回 ";"。因为你不这么做,你存储过程内的分号会被当作“语句结束了”来执行,这样整个语句就报错了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。