当前位置: 首页 > 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.mrgr.cn/news/45602.html

相关文章:

  • 抖音小红书AI真人美女套图玩法,多种变现方式,手把手教你
  • APP自动化搭建与应用
  • 牛客 KY264 单词识别
  • 解析Vue源码中是如何进行模版编译的
  • 【代码随想录Day37】动态规划Part06
  • 电影《749局》路演 苗苗演绎超能力少女分享幕后故事
  • JavaScript的内置对象有哪些?
  • Java基础(上)
  • 【牛客刷题实战】BC119 最高分与最低分之差
  • 开通商家转账到零钱技巧
  • 支持向量机SVM
  • cuda内存种类
  • Ubuntu2404配置本地离线源
  • 流浪地球行星发动机
  • HTB:Tactics[WriteUP]
  • C++——STL简介
  • 文件内容提取:Apache Tika 2.9.2
  • 有哪些工具可以辅助特定方法来提升DFT ATPG的coverage?
  • 26.删除有序数组中的重复项
  • vue3 对 vue2 有什么优势