这里写目录标题

  • 最简单的存储过程(创建)
  • 简单的存储过程(带参数)
  • 普通存储过程(带变量,异常捕获,错误信息输出的)
  • 带游标的存储过程
  • 调试(采用select方法 或dbForge studio 2020 for mysql这个软件)

最简单的存储过程(创建)

首先是存储过程的定义:
CREATE DEFINER=[用户] PROCEDURE [存储过程名] (参数) BEGIN END;

如下图代码:

CREATE DEFINER=`root`@`%` PROCEDURE `NewTest`( )
BEGIN
END

定义了一个名为NewTest的存储过程,它的用户是root,没有任何参数,begin-end之间也没执行任何的操作,但是已经是一个完整的存储过程了。

简单的存储过程(带参数)

参数的定义 IN | OUT | INOUT 参数名 类型
IN 传入的参数
OUT 传出的参数
INOUT 传入传出都具备

CREATE DEFINER=`root`@`%` PROCEDURE `NewTest`(
IN `IN_NAME` varchar(200), #传入的参数
OUT `OUI_RETURN` varchar(200) #需要输出的
)
BEGINdelete from test111 where name=IN_NAME;
if ROW_COUNT()>0  ##ROW_COUNT() mysql 内置的用来返回受影响的行数
then set OUI_RETURN='成功';  #赋值  需要使用set 关键字
else set  OUI_RETURN='失败';
end if;END

这是一个根据传入的姓名进行删除操作,并返回执行结果信息的一个存储过程。有一个传入参数IN_NAME,和一个传出的参数OUI_RETURN

以下为test111的表数据:

call NewTest('徐',@result); ##存储过程的调用 用@result来接收返回值
select @result;##在控制台输出返回的结果

控制台输出结果:

查看一下表 test111,确实已经被删掉了两条name='徐’的数据

普通存储过程(带变量,异常捕获,错误信息输出的)

通常采用存储过程时都是需要处理复杂的逻辑操作,因此存储过程中必须带有异常回滚和错误信息输出的功能,方便以后的调试。
DECLARE [CONTINUE|EXIT] HANDLER FOR [SQLWARNING|SQLEXCEPTION|NOT FOUND] BEGIN [需要执行的操作] END;

CONTINUE 捕获异常并执行异常操作之后继续执行下面的语句
EXIT 离开最近的一对begin-end

SQLWARNING SQL警告
SQLEXCEPTION SQL语句错误
NOT FOUND 没有发现数据 通常与 select into 和游标有关

CREATE DEFINER=`root`@`%` PROCEDURE `NewTest`(
IN `IN_NAME` varchar(200), #传入的参数
OUT `OUI_RETURN` varchar(200) #需要输出的
)
BEGINDECLARE r_code varchar(255);#变量的定义   作用域在 包含离它最近的一对 begin-end之间DECLARE r_msg varchar(255);##声明异常捕获和捕获后的操作DECLARE EXIT HANDLER FOR SQLWARNING,SQLEXCEPTION,NOT FOUND  ##异常捕获begin ##出现异常之后 需要执行的操作GET DIAGNOSTICS CONDITION 1r_code = RETURNED_SQLSTATE, r_msg = MESSAGE_TEXT; ##将mysql内置的错误代码和错误信息赋值给变量SET  OUI_RETURN =CONCAT('失败',r_code,r_msg); ##CONCAT 字符拼接  end; ## 需要执行的操作结束delete  from test where name=IN_NAME;#删除操作会出现异常,因为没有test这个表if ROW_COUNT()>0  ##ROW_COUNT() mysql 内置的用来返回受影响的行数then set OUI_RETURN='成功'; #赋值else set  OUI_RETURN='失败';end if;END

由于没有test这张表肯定到删除这个操作的时候会出现SQLEXCEPTION异常,就会被捕捉到,这时候将会执行异常捕获后的操作将mysql内置的错误信息和错误代码拼接并且赋值给OUI_RETURN,操作结束之后由于声明的是 EXIT 所以会退出包含它并且离它最近的begin-end,也就是大写的这个BEGIN-END(mysql是不区分大小写的,只是为了方便读者辨认)。

调用一下存储过程,并输出返回值看看是否是这个结果。结果确实显示失败和错误的原因了,原因是没有test这张表

带游标的存储过程

通常查询语句并赋值给变量我们采用 select into语句,但是由于select into只支持一条数据
但有时候我们需要处理结果集,就需要使用游标了,首先也是游标的声明
DECLARE [游标的名称] cursor for [查询语句];
当需要打开游标的时候就需要使用open [游标的名字];
再紧跟loop循环

CREATE DEFINER=`root`@`%` PROCEDURE `NewTest`(
IN `IN_ID` varchar(200)
)
BEGIN
declare r_sql varchar(2000);
declare r_notfound varchar(1);##该游标是获取test111中的name的值
declare cur_a cursor for select name from test111;open cur_a;##打开游标leave_loop:loop ##开启循环,并给循环起个别名叫leave_loopbegindeclare continue handler for not found set r_notfound='Y';##当捕获到没数据的异常时,就置Yset r_notfound='N';##默认是Nfetch cur_a into r_name;  #从游标获取值if r_notfound='Y'  ##如果等于Y 代表没数据then leave leave_loop;#离开循环end if;end;###下面可以写当有数据时候的各种操作##end loop;#循环结束close cur_a;END

游标取值的顺序必须与定义的时候的顺序相等

调试(采用select方法 或dbForge studio 2020 for mysql这个软件)

1.最常见的想要对mysql存储过程进行调试需要采用select语句,这样运行完毕后就能够在输出台看到r_sql的值。但是如果采用的是Navicat,会发现输出台只能最多显示10个变量的值。

CREATE DEFINER=`root`@`%` PROCEDURE `NewTest`()
BEGIN
declare r_sql varchar(2000);set r_sql='222';
select r_sql;END


2.dbForge studio 2020 for mysql
这个软件能够实现如orcal的plsqldev的功能,能够进行一步一步的调试。需要自己寻找资源。如果在调试模式保存后,它会将代码改掉多出一堆用来调试的语句,但是不用担心只要退出调试模式之后再保存一遍就可以变回原来的样子了。还有不要忘记了要在调试之前打好断点,否则一下就运行结束了

MYSQL存储过程详解(创建、变量的定义、异常、错误输出、游标、调试)相关推荐

  1. MySQL存储过程详解 mysql 存储过程

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  2. mysql存储过程详解[转]

    mysql存储过程详解[转] 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功 ...

  3. mysql存储过程按区间_针对新手的MYSQL存储过程详解_CSDN_ChenF的博客-CSDN博客

    原文作者:橘左京i 原文标题:针对新手的MYSQL存储过程详解 发布时间:2021-02-22 10:03:18 一位爱好技术的橘右京的哥哥橘左京 前言:什么是存储过程?存储过程就像是一个接口,可以直 ...

  4. MySQL存储过程详解

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  5. MySQL——存储过程详解及实例分析

    目录 一.储存过程简介 1.什么是存储过程 2.存储过程优缺点 3.存储过程入门程序 4.在idea中如何调用储存过程? 二.存储过程编程 1.存储过程的变量 2.存储过程中的参数 3.选择结构if ...

  6. mysql存储过程default的意思,针对新手的MYSQL存储过程详解

    一位爱好技术的橘右京的哥哥橘左京 前言:什么是存储过程?存储过程就像是一个接口,可以直接去调用,不需要重复的编写. 1.1 存储过程和函数概述存储过程和函数是事先经过编译并存储在数据库的一段SQL语句 ...

  7. mysql 存储过程详解

    前言 在项目开发中,经常会遇到这样一种场景,当修改A表的一条数据时,需要关联修改B表.C表甚至其他更多表的数据,为什么会这样呢? 在真实的业务场景中,往往一张表的数据关联的业务是多样的,举例来说,用户 ...

  8. mysql存储过程详解 mysql存储过程和函数

    第20章:存储程序和函数 目录 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER ...

  9. 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ☞ ...

  10. Mysql 存储过程详解(procedure)

    文章目录 1 概述 2 语法 2.1 创建 2.2 调用 2.3 查询 2.4 删除 1 概述 #mermaid-svg-uujcLyKOdw40JE4G {font-family:"tre ...

最新文章

  1. 算法---------宝石与石头
  2. C#xml创建修改读取删除帮助类XmlHelper.cs
  3. 三运放差分放大电路分析_三运放差分放大电路
  4. 数据库高可用(HA)技术有哪些?
  5. python web框架之Tornado
  6. java 中的单引号报错_shell中的单引号,双引号,反引号
  7. python连接redis哨兵_python连接redis sentinel集群
  8. java如何编译运行?
  9. 谷歌收购DNNresearch能获得什么?
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源...
  11. 快来对号入座!四句话告诉你怎样的企业适用于移动平台
  12. 程序员揭秘 一些鲜为人知的编程真相
  13. 使用python爬取行政区划
  14. 200 OK(from memory cache)和 200 OK(from disk cache)
  15. SpringCloud 微服务网关Gateway常用限流算法以及简单实现
  16. Mezzanine学习---使用自定义模板
  17. 如何使用typora来写博客?
  18. python解决数学问题
  19. 工控系统设计(八)组态功能开发
  20. 【维生素C语言】第十五章 - 柔性数组(可变长数组)

热门文章

  1. 华为服务器虚拟化:Fusion Compute基础教程
  2. Windows 实时语音转文字|免费语音视频翻译转文字|语音会议记录方案
  3. php怎么画五星红旗,php基于GD库画五星红旗的方法,phpgd库五星红旗
  4. php怎么画五星红旗,PHP_php基于GD库画五星红旗的方法,本文实例讲述了php基于GD库画 - phpStudy...
  5. 霍夫丁不等式、马尔科夫不等式证明
  6. 马尔可夫不等式、切比雪夫不等式、柯西-施瓦茨不等式
  7. 苹果cmsv10模板全局响应式自适应模板电影网站模板源码
  8. 基于特征的真菌分解木材的理解
  9. Marlin固件解析G代码部分分析
  10. windows下Git与TortoiseGit的官网下载与安装