#游标的使用
/*
① 声明游标
② 打开游标
③ 使用游标(从游标中获取数据)
④ 关闭游标
*/
#举例:创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,
#DOUBLE类型:声明OUT参数total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值
#直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count
USE dbtest16;
DELIMITER //
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE, OUT total_count INT )
BEGIN
#声明局部变量
DECLARE sum_sal DOUBLE DEFAULT 0.0;#记录累加工资总和
DECLARE emp_sal DOUBLE;#记录每一个员工的工资
DECLARE emp_count INT DEFAULT 0;#记录累加人数
#1、声明游标
DECLARE emp_cursor CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
#2、打开游标
OPEN emp_cursor;
REPEAT
#3、使用游标
FETCH emp_cursor INTO emp_sal;
SET sum_sal= sum_sal +emp_sal;
SET emp_count = emp_count +1;
UNTIL sum_sal >= limit_total_salary
END REPEAT;
SET total_count = emp_count;
#4、关闭游标
CLOSE emp_cursor;
END//
DELIMITER;
#调用
CALL get_count_by_limit_total_salary(200000,@total_count);
SELECT @total_count;
07-05
1192
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)