mysql 开发基础系列18 存储过程和函数(下)
1. 光标的使用(游标)
在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close。
下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重要, 重点在于如何使用光标:
SELECT city_id FROM test.city
DELIMITER $$ CREATE PROCEDURE proc_demo_cursor() BEGIN-- 定义变量,获取光标中的数据DECLARE city_id_staff SMALLINT DEFAULT 0;-- 声明光标DECLARE cur_city CURSOR FOR SELECT city_id FROM test.city;-- 定义条件 没有找到数据时退出光标 NOT FOUND CLOSE cur_cityDECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_city; SET @result=0;-- 打开光标OPEN cur_city;REPEATFETCH cur_city INTO city_id_staff;IF city_id_staff < 10 THEN SET @result=@result+1;ELSE SET @result=@result+2;END IF;UNTIL 0 END REPEAT;-- 关闭光标CLOSE cur_city; END $$ DELIMITER ;-- 调用 CALL proc_demo_cursor; SELECT @result;
2. 流程控制
包括 if ,case, loop, leave, iterate, repeat, while 语句进行流程控制
2.1 IF 语句
-- 语法如下 IF search_condition THEN statement_list [ELSE IF search_condition THEN statement_list] ... [ELSE statement_list] END IF -- 举例 IF city_id_staff < 10 THEN SET @result=@result+1; ELSE SET @result=@result+2; END IF;
2.2 CASE 语句
-- 举例二种用法 CASE WHEN i_staff_id = 2 THENSET @x1 = @x1 + d_amount; ELSESET @x2 = @x2 + d_amount; END CASE; -- 或者: CASE i_staff_id WHEN 2 THENSET @x1 = @x1 + d_amount; ELSESET @x2 = @x2 + d_amount; END CASE;
2.3 loop 语句
loop 实现简单的循环,退出循环条件可以使用leave语句。
DELIMITER $$ CREATE PROCEDURE proc_demo_loop() BEGINDECLARE increase INT DEFAULT 1;SET @x=0;ins: LOOPSET increase=increase+1; IF increase =100 THENSET @x=increase;-- 退出 LEAVE ins;END IF;END LOOP ins; END $$ DELIMITER ;
-- 调用 CALL proc_demo_loop; SELECT @x;
2.4 ITERATE语句
ITERATE该语句必须用在循环中,作用相当于for 中的continue, 跳过当前循环剩下的语句,直接进入下一轮循环。
DELIMITER $$ CREATE PROCEDURE proc_demo_iterate() BEGINDECLARE increase INT DEFAULT 1;SET @x=0;ins: LOOPSET increase=increase+1; IF increase =100 THEN-- 退出 LEAVE ins;ELSEIF MOD(increase,2)=0 THEN-- 返回 ITERATE ins;END IF;SET @x=@x+1;END LOOP ins; END $$ DELIMITER ; -- 调用 CALL proc_demo_iterate; SELECT @x;
2.5 repeat 语句
有条件的循环控制语句,当满足条件的时候退出循环,在上面的光标也是一种循环,使用repeat来退出光标,使用close来关闭光标。
-- 语法 [begin_label:] REPEAT statement_list UNTIL search_condition END REPEAT [end_label]-- 举例(UNTIL 0 END REPEAT)退出 当search_condition为0时,使用END REPEAT退出 REPEATFETCH cur_city INTO city_id_staff;IF city_id_staff < 10 THEN SET @result=@result+1;ELSE SET @result=@result+2;END IF;UNTIL 0 END REPEAT;
2.6 while 语句
也是有条件的循环控制语句,当满足条件的时候退出循环。WHILE 循环和REPEAT 循环的区别在于:WHILE 是满足条件才执行循环,REPEAT 是满足条件退出循环;WHILE 在首次循环执行之前就判断条件,所以循环最少执行0 次,而REPEAT 是在首次执行循环之后才判断条件,所以循环最少执行1 次。 相当于开发语言的while(bool) 和do while(bool)。
DELIMITER $$ CREATE PROCEDURE proc_demo_while() BEGINDECLARE increase INT DEFAULT 1;SET @x=0;WHILE increase<=10 DOSET increase=increase+1;SET @x=@x+increase;END WHILE; END $$ DELIMITER ;-- 调用 CALL proc_demo_while; SELECT @x;
转载于:https://www.cnblogs.com/MrHSR/p/9293744.html
mysql 开发基础系列18 存储过程和函数(下)相关推荐
- mysql 开发基础系列22 SQL Model(带迁移事项)
一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...
- mysql 开发基础系列19 触发器
触发器是与表有关的数据库对象,触发器只能是针对创建的永久表,而不能是临时表. 1.1 创建触发器 -- 语法: CREATE TRIGGER trigger_name trigger_time tri ...
- 掌握web开发基础系列--物理像素、逻辑像素、css像素
思考一下 什么是物理像素?什么是css像素? 在 <掌握web开发基础系列--长度单位> 这篇文章中已经介绍过了css像素单位--px,这篇文章详细探讨一下设备物理像素和css像素之间的关 ...
- mySQL教程 第7章 存储过程和函数
第7章 存储过程和函数 存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储 ...
- mySQL 教程 第7章 存储过程和函数
存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...
- asp.net控件开发基础系列
本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...
- MySQL高级篇-彻底掌握存储过程和函数
MySQL从5.0版本开始支持存储过程和函数.存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可. 1.存储过 ...
- 夯实Java基础系列18:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性
系列目录 [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取单文件/模型下单个构建的属性信息. 请求地址:GET https://api.bimface.com/data/v2/fil ...
最新文章
- java中hashMap的排序
- 一文带你了解光纤收发器和交换机之间的区别
- 程序员减轻压力的十个建议
- Python 2.7:字符串乱码问题的解决
- 通达信版弘历软件指标_通达信弘历趋势王指标
- Spring Boot 2.3.3 正式发布!
- 编程学习记录11:Oracle数据库的一些基本操作1,创建用户,授权
- 总结下MySql优化。防止数据灾难的发生。
- Docker的八种用途
- ActiveReport报表模板库新增21张报表模板,加入报表导出功能!
- 计算机的最简单的操作,电脑无线投屏怎么使用(手把手教你最简单且实用的操作方法)...
- NAT 穿透是如何工作的:技术原理及企业级实践
- 安卓ps模拟器_用电脑玩安卓游戏!逍遥模拟器免安装版PC软件
- Open3D-GUI系列教程(七)打包应用程序
- 维特比算法在隐马尔可夫模型中的应用
- python从视频中提取音频信号_通过python从音频文件中提取音频
- 什么是驱动?驱动程序的工作原理?
- 【Leetcode】1386. Cinema Seat Allocation
- 白宫举办开源安全峰会,众多科技巨头参加
- 高阶函数、列表/集合/字典/推导式、递归函数