当前位置: 首页 > news >正文

mysql游标的使用

说明:

虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是 随意定位到某一条记录 ,并对记录的数据进行处理。这个时候,就可以用到游标。游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构。游标让 SQL 这种面向集合的语言有了面向过程开发的能力。在 SQL 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标 充当了指针的作用 ,我们可以通过操作游标来对数据行进行操作。

总的步骤
第一步,声明游标
DECLARE cursor_name CURSOR FOR select_statement;
第二步,打开游标
OPEN cursor_name
第三步,使用游标(从游标中取得数据
FETCH cursor_name INTO var_name [, var_name] ...
第四步,关闭游标
CLOSE cursor_name

示例:
创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,DOUBLE类型;声明 OUT参数 total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和 达到limit_total_salary参数的值,返回累加的人数给total_count。

DROP PROCEDURE get_count_by_limit_total_salary;
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,OUT total_count INT)
BEGINDECLARE sum_salary DOUBLE DEFAULT 0;DECLARE do_count int DEFAULT 0;DECLARE cursor_salary DOUBLE ;-- 第一步,声明游标DECLARE emp_cursor CURSOR FOR select salary from employees order by salary desc;-- 第二步,打开游标OPEN emp_cursor;-- 第三步,使用游标(从游标中取得数据REPEATFETCH emp_cursor INTO cursor_salary;set  sum_salary = sum_salary + cursor_salary;set  do_count = do_count + 1;UNTIL  sum_salary >= limit_total_salary END REPEAT;CLOSE emp_cursor;-- 第四步,关闭游标set total_count = do_count;
END;call get_count_by_limit_total_salary(100000,@total_count);
select @total_count;

对上面做一些解释,游标与循环 REPEAT UNTIL END REPEAT; 结合使用

http://www.lryc.cn/news/456219.html

相关文章:

  • linux udev详解
  • EventSource和websocket该用哪种技术
  • 通信工程学习:什么是三网融合
  • 自定义类型结构体(上)
  • b站-湖科大教书匠】4 网络层 - 计算机网络微课堂
  • 国际 Android WPS Office v18.13 解锁版
  • 【中间件学习】Git的命令和企业级开发
  • FTP连接池与多线程FTP上传下载算法(Java)
  • Spring Cloud微服务详解
  • QT学习笔记1.2(QT的应用)
  • 数学建模算法与应用 第1章 线性规划
  • 使用 systemd 设置 PHP 程序为服务
  • HRNET模型实现钢板表面缺陷检测
  • 28 基于51单片机的两路电压检测(ADC0808)
  • SpringBootTest Mockito 虚实结合编写测试
  • 国内外网络安全政策动态(2024年9月)
  • 使用Android studio进行Unit Test中遇到的问题记录
  • 智能运维与问题诊断工具:提升生产环境的安全稳定性
  • 【MAUI】CommunityToolkit社区工具包介绍
  • 【答疑解惑】图文深入详解undo和redo的区别及其底层逻辑
  • 低通滤波、反相放大器电路
  • SpringBoot助力服装生产流程优化
  • 【机器学习】线性回归算法简介 及 数学实现方法
  • 设计模式的学习
  • wordpress发邮件SMTP服务器配置步骤指南?
  • 胤娲科技:机械臂「叛逃」记——自由游走,再悄然合体
  • 分布式事务讲解 - 2PC、3PC、TCC
  • 前端基础面试题·第四篇——Vue(其二)
  • PHP反射
  • Gated Transformer Networks for Multivariate Time Series Classification