• 条件处理语句
  • 流程控制语句
  • 条件

存储过程

例如那种每天都要做重复的数据统计工作。其实,这种数据量大,而 且计算过程复杂的场景,就非常适合使用存储过程。

存储过程的创建

CREATE PROCEDURE 存储过程名 ([ IN | OUT | INOUT] 参数名称 类型)程序体
 -- 可以把[] 理解为 返回类型 可有可无 默认IN

-- 存储过程的思路

mysql存储过程游标动态游标 mysql存储过程 游标_mysql存储过程游标动态游标

mysql存储过程游标动态游标 mysql存储过程 游标_c语言_02

存储过程的参数定义

参数

  • IN 表示输入的参数,存储过程只是读取这个参数的值。如果没有定义参数种类,默认就 是 IN,表示输入参数。
  • OUT 表示输出的参数,存储过程在执行的过程中,把某个计算结果值赋给这个参数,执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值 了。
  • INOUT 表示这个参数既可以作为输入参数,又可以作为输出参数使用
  • 除了定义参数种类,还要对参数的数据类型进行定义,上面的transdate 的数据类型是 TEXT。这个参数的用处是告诉存储过程,我要处理的是哪一 天的数据。

存储过程的程序体

begin end  -- 包裹结构体
set -- 定义参数 作用是根据输入参数 决定的
  • CASE 函数 , 这是为了 防止计算出现被 0 除而报错的情况。的情况。我建议你在实际工作中,把这 些极端情况都考虑在内,提前进行防范,这样你的代码才能稳定可靠.
  • 最后把\\ 还原为
  • SHOW CREATE PROCEDURE demo.dailyoperation \G 查询存储过程
  • CALL demo.dailyoperation('2020-12-01'); 调用 存储过程 , 调用之后还需要进行 select 进行查询
  • 修改和删除存储过程 ,使用Workbench 进行直接修改 , 如果用mysql 需要删除 然后重新创建
  • DROP PROCEDURE 存储过程名称; 删除存储过程

小结

  • 存储过程的优点就是执行效率高,而且更加安全,不过,它也有着自身的缺点,那就是开 发和调试的成本比较高,而且不太容易维护。
  • 调试 : select 输出变量值的方法进行调试

游标

  • 游标 : 能够对结果集中的每一条数据进行定位, 并对指向记录中的数据进行操作的数据结构。
  • 游标只能在存储程序内使用,存储程序包括存储过程和存储函数。
-- 创建存储函数
CREATE FUNCTION 函数名称 (参数)RETURNS 数据类型 程序体
  • 存储函数与存储过程很像,但有几个不同点:
  1. 存储函数必须返回一个值或者数据表,存储过程可以不返回。
  2. 存储过程可以通过 CALL 语句调用,存储函数不可以。
  3. 存储函数可以放在查询语句中使用,存储过程不行。
  4. 存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务 操作,这些功能是存储函数不具备的。
-- 使用游标的四个步骤:
declare 游标名 cursor for 查询语句;  -- 它可以操作的数据集是“查询语句”返回的结果集。
open 游标名;
fetch 游标名 into 变量列表;   -- 从游标的数据结果集中读取数据
-- 游标的查询结果集中的字段数,必须跟 INTO 后面的变量数一致
close 游标名;
  • 用完游标之后,你一定要记住及时关闭游标。因为游标会占用系统资源,影响系统运行的效率。
  • 对每一个进货商品进行两个操作:1 、 加上进货数量 。 2、更新数量 然后 算出价格 / 时间 = 平均进价。
  • 定义游标。这里我指定了游标的名称,以及游标可以处理的数据集(mylistnumber 指 定的进货单的全部进货商品明细数据)。
    定义条件处理语句“DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;”。

条件处理语句

DECLARE 处理方式 HANDLER FOR 问题 操作    -- NOT FOUND”:游标走到结果集的最后,数据处理完了
-- 处理方式 continue or exit 遇到问题 继续还是退出程序


![img]()
![img]()

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取]()**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**