数据库存储过程创建可能出现的问题

数据库存储过程创建可能出现的报错问题

例如:使用存储过程判断输入用户名和密码是否正确,返回1,登陆成功;返回0,登录失败。

1064 - You have an error in your SQL syntax;

错误:变量定义

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 'int ;
语法错误,在存储过程中定义变量需要使用局部变量DECLARE进行声明。
即 DECLARE num int ;

delimiter//
CREATE PROCEDURE upLoginUser(in in_name varchar(10),in pwd varchar(10))
no sql 
begin
		num int ;
		select count(uid) as num from users where uname=in_name and upwd=pwd;
		if num=1 then
				select '登陆成功';
		else
				select '登陆失败';
		end if;	
end //
//> 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 'int ;
//语法错误,在存储过程中定义变量需要使用局部变量DECLARE进行声明。
//即 DECLARE num int ;

1054 - Unknown column ‘uid’ in ‘field list’

错误:查询来源

delimiter//
CREATE PROCEDURE upLoginUser( in_name varchar(10), pwd varchar(10))
no sql 
begin
			DECLARE num int ;
这里:		   select count(uid) as num  where uname=in_name and upwd=pwd;
			if num=1 then
						select '登陆成功';
			else
						select '登陆失败';
			end if;
end //

set @in_name='郭辉';
set @pwd='0a1';
call 	upLoginUser(@in_name,@pwd);

在这里插入图片描述

存储过程没有报错,传参失败,不知道存储过程中使用的参数来自哪里
改为select count(uid) as num from users where uname=in_name and upwd=pwd;

1406 - Data too long for colum ‘字段名’ at row 1

错误:字符长度

比如你一开始给字段定义了长度,赋值的时候忘记了就可能出现错误。
call upLoginUser('小白','rhtr5e6ujr67u');
密码长度超出定义.

在这里插入图片描述

1318 - Incorrect number of arguments for PROCEDURE on.upLoginUser…

错误:参数数量不一致

存储过程接收的参数和传进去的参数数目不一致,需要1个,有两个

delimiter//
CREATE PROCEDURE upLoginUser( in_name varchar(10))
no sql 
begin
			DECLARE num int ;
			select count(uid) as num from users where uname=in_name and upwd=pwd;
			if num=1 then
						select '登陆成功';
			else
						select '登陆失败';
			end if;
end //
set @in_name='郭辉';
set @pwd='0a1';
call 	upLoginUser(@in_name,@pwd);

在这里插入图片描述

编译正常没有报错,输出结果不对

错误:输出不正确

输出不正确,别名name和局部变量的作用域不一致,无法关联,判断正确却没有办法输出正确结果。

delimiter//
CREATE PROCEDURE upLoginUser( in_name varchar(10), pwd varchar(10))
no sql 
begin
			DECLARE num int ;
			select count(uid) as num from users where uname=in_name and upwd=pwd;
			if num=1 then
						select '登陆成功';
			else
						select '登陆失败';
			end if;
end //
set @in_name='郭辉';
set @pwd='0a1';
call 	upLoginUser(@in_name,@pwd);

在这里插入图片描述
输出不正确,别名name和局部变量的作用域不一致,无法关联,判断正确却没有办法输出正确结果。

正确编写

delimiter//
CREATE PROCEDURE upLoginUser(in in_name varchar(10),in pwd varchar(10))
no sql 
begin
	DECLARE num INT;
			set num = (select count(uid) from users where uname=in_name and upwd=pwd);
			select if( num>0 ,'登陆成功', '登陆失败') as login;
end //
          
set @in_name='小白';
set @pwd='0a1';
call 	upLoginUser(@in_name,@pwd);

在这里插入图片描述

小技巧

如果编写过程中出错了,可以使用‘drop PROCEDURE 过程名’进行删除,然后接着在原来的上面进行改写。如果出现其他的错误可以先试着翻译一下,看看哪里出现异常不对,解决不了再去寻求解析。这样对于这种错误印象会更加深刻,下次就会马上想起来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨犀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值