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

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

6d926c9dde684f0897d77fa52559c810.png6d926c9dde684f0897d77fa52559c810.png数据库存储过程创建可能出现的报错问题


例如:使用存储过程判断输入用户名和密码是否正确,返回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);


304815681ea8489e9bb257261639d47e.png

存储过程没有报错,传参失败,不知道存储过程中使用的参数来自哪里

改为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');

密码长度超出定义.

b2cdc4fffd904ff898e4dd114fa39933.png


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);


8f4e77b115de429ba2133184a12d407d.png


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


错误:输出不正确


输出不正确,别名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);


6d926c9dde684f0897d77fa52559c810.png

输出不正确,别名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);


6ab0bae5870449d7a2f678e2e4f22da6.png


小技巧


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

相关文章
|
5月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
295 0
|
5月前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
46 1
|
2月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
2月前
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
|
2月前
|
存储 SQL 数据库
|
4月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
32 0
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
|
5月前
|
存储 数据库
sqlserver------数据库的存储过程(练习)
sqlserver------数据库的存储过程(练习)
42 1
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
93 0
|
4月前
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-循环(while、repeat、loop)
MySQL数据库——存储过程-循环(while、repeat、loop)
611 0

热门文章

最新文章

下一篇
无影云桌面