展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

mysql基础(十七):游标

  • 简介
在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是 随意定位到某一条记录 ,并对记录的数据进行处理
游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构。游标让 SQL 这种面向集合的语言有了面向过程开发的能力
在 SQL 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标 充当了指针的作用 ,我们可以通过操作游标来对数据行进行操作
MySQL中游标可以在存储过程和函数中使用
  • 使用步骤
① 声明游标
② 打开游标
③ 使用游标(从游标中获取数据)
④ 关闭游标
  • 代码案例
# 举例:创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,
# DOUBLE类型;声明OUT参数total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count
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;
posted @ 2022-06-01 21:19  DogLeftover  阅读(27)  评论(0编辑  收藏  举报