开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-03 14:26:06 654 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB


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




    ######我把代码按你说的改了,还是有错######看看是不是1应该是‘1’,字符类型的
    ######回复 @飞天小猪猪 : 1、varchar不是类型,varchar(1)这种才是 2、用个好点的编辑器吧,写上就报红叉了,比如自带的workbench 3、百度去,多了去的解答######你看看下面的错误,我改为了'1'###### ###### DECLARE v1 VARCHAR

    SET v1=p


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

    ######回复 @飞天小猪猪 : 我靠你把上面语句全写在一起了?######我把两个分割符加上后和原来得报错提醒一样###### ###### VARCHAR要指明宽度,要在前面声明语句的结束符号######看下边######

    引用来自“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 ;




    是这个吗?不行啊

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

    delimiter //

    delimiter ;

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


    ######谢谢
    2020-06-03 16:45:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像