mysql存储过程,我做了一个简单的,为甚麽总是出错?
功能:写一个存储过程:同时增加一条学生基本信息和该学生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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
谢谢
delimiter //
delimiter ;
很多时候,是这2句的问题,一般都要先重定义语义结束符,默认是";",先重定义成 "//",用完之后,再换回 ";"。因为你不这么做,你存储过程内的分号会被当作“语句结束了”来执行,这样整个语句就报错了。
我用的mysql,还是要谢谢你
你在检查下自己的存储过程语法,至少SQLServer不是这样的,首行要有as关键字, https://msdn.microsoft.com/zh-cn/library/ms187926.aspx
引用来自“yizhilong”的评论
字符集的问题,估计你的客户端与server的字符集不一致
看下边
VARCHAR要指明宽度,要在前面声明语句的结束符号
我把两个分割符加上后和原来得报错提醒一样
回复
我靠你把上面语句全写在一起了?
DECLARE v1 VARCHAR
SET v1=p
你还问为什么老出错,我说为啥不出错,你看看你的语法正确吗,sql语句后面的分隔符呢,默认都是; 你这两句和insert 一起合并成一句sql,你觉得正常吗
你看看下面的错误,我改为了'1'
回复
1、varchar不是类型,varchar(1)这种才是 2、用个好点的编辑器吧,写上就报红叉了,比如自带的workbench 3、百度去,多了去的解答
看看是不是1应该是‘1’,字符类型的
我把代码按你说的改了,还是有错
字符集的问题,估计你的客户端与server的字符集不一致