我是靠谱客的博主 英俊睫毛膏,最近开发中收集的这篇文章主要介绍【MySQL必知必会】 存储过程 | 游标存储过程存储过程的参数定义存储过程的程序体游标,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 存储过程
- 存储过程的创建
- 存储过程的参数定义
- 存储过程的程序体
- 小结
- 游标
- 条件处理语句
- 流程控制语句
- 条件
存储过程
例如那种每天都要做重复的数据统计工作。其实,这种数据量大,而 且计算过程复杂的场景,就非常适合使用存储过程。
存储过程的创建
CREATE PROCEDURE 存储过程名 ([ IN | OUT | INOUT] 参数名称 类型)程序体
-- 可以把[] 理解为 返回类型 可有可无 默认IN
-- 存储过程的思路
存储过程的参数定义
参数
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 数据类型 程序体
- 存储函数与存储过程很像,但有几个不同点:
- 存储函数必须返回一个值或者数据表,存储过程可以不返回。
- 存储过程可以通过 CALL 语句调用,存储函数不可以。
- 存储函数可以放在查询语句中使用,存储过程不行。
- 存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务 操作,这些功能是存储函数不具备的。
-- 使用游标的四个步骤:
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 遇到问题 继续还是退出程序
-- 数据处理完成了 done=TRUE
流程控制语句
-- 跳转语句
ITERATE 语句:只能 --用在循环语句内,表示重新开始循环 -- 相对于 continue
LEAVE 语句 跳出 -- 相对于break 用于可以用在循环语句内,或者以 BEGIN 和 END 包裹起来的程序体内
-- 循环语句
标签:LOOP -- LOOP 循环不能自己结束,需要用跳转语句 ITERATE 或者 LEAVE 来进行控制。
操作
END LOOP 标签;
-- WHILE 语句的语法结构
WHILE 条件 DO -- 循环是先判断条件,再执行循环体中的操作
操作
END WHILE;
-- REPEAT 语句的语法结构
REPEAT -- REPEAT 循环是先执行操作,后判断条件
操作
UNTIL 条件 END REPEAT;
条件
-- IF 语句的语法结构是
IF 表达式1 THEN 操作1 -- 不同的表达式对应不同的操作。
[ELSEIF 表达式2 THEN 操作2]
……
[ELSE 操作N]
END IF
-- CASE 语句
CASE 表达式
WHEN 值1 THEN 操作1
[WHEN 值2 THEN 操作2]
……
[ELSE 操作N] END CASE;
- 如果一个操作要用到另外一个操作的结果,那我们一定 不能搞错操作的顺序。
最后
以上就是英俊睫毛膏为你收集整理的【MySQL必知必会】 存储过程 | 游标存储过程存储过程的参数定义存储过程的程序体游标的全部内容,希望文章能够帮你解决【MySQL必知必会】 存储过程 | 游标存储过程存储过程的参数定义存储过程的程序体游标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复