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

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

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

相关文章
|
8月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
496 0
|
8月前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
61 1
|
3月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
51 5
|
5月前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
54 1
|
5月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
5月前
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
|
5月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
147 0
|
5月前
|
存储 SQL 数据库
|
7月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
56 0
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)