自学内容网 自学内容网

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)
BEGIN

DECLARE 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;

-- 第三步,使用游标(从游标中取得数据
REPEAT
FETCH 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; 结合使用


原文地址:https://blog.csdn.net/java_study_/article/details/142758012

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!