mysql存储过程,我做了一个简单的,为甚麽总是出错?

发布于 2021-11-30 22:58:44 字数 533 浏览 731 评论 17

功能:写一个存储过程:同时增加一条学生基本信息和该学生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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

冷弦 2021-12-04 19:33:50

谢谢

陌上芳菲 2021-12-04 19:33:33

delimiter //

delimiter ;

很多时候,是这2句的问题,一般都要先重定义语义结束符,默认是";",先重定义成 "//",用完之后,再换回 ";"。因为你不这么做,你存储过程内的分号会被当作“语句结束了”来执行,这样整个语句就报错了。

可是我不能没有你 2021-12-04 19:31:49

我用的mysql,还是要谢谢你

绝影如岚 2021-12-04 19:31:24

你在检查下自己的存储过程语法,至少SQLServer不是这样的,首行要有as关键字, https://msdn.microsoft.com/zh-cn/library/ms187926.aspx

尐偏执 2021-12-04 19:31:20

引用来自“yizhilong”的评论

字符集的问题,估计你的客户端与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 ;

沦落红尘 2021-12-04 19:31:09

看下边

心欲静而疯不止 2021-12-04 19:29:43

VARCHAR要指明宽度,要在前面声明语句的结束符号

流心雨 2021-12-04 19:10:56

疾风者 2021-12-04 18:44:36

我把两个分割符加上后和原来得报错提醒一样

倾城泪 2021-12-04 18:30:23

回复
我靠你把上面语句全写在一起了?

孤独患者 2021-12-04 17:28:31

DECLARE v1 VARCHAR

SET v1=p

你还问为什么老出错,我说为啥不出错,你看看你的语法正确吗,sql语句后面的分隔符呢,默认都是; 你这两句和insert 一起合并成一句sql,你觉得正常吗

笑红尘 2021-12-04 16:07:35

偏爱自由 2021-12-04 15:36:55

你看看下面的错误,我改为了'1'

不再见 2021-12-04 14:12:21

回复
1、varchar不是类型,varchar(1)这种才是 2、用个好点的编辑器吧,写上就报红叉了,比如自带的workbench 3、百度去,多了去的解答

拍不死你 2021-12-04 05:58:19

看看是不是1应该是‘1’,字符类型的

回眸一笑 2021-12-03 13:08:19

我把代码按你说的改了,还是有错

浮生未歇 2021-12-03 08:49:28

字符集的问题,估计你的客户端与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 ;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文