乐清网站优化推广,兴山县铁路建设协调指挥部网站,平面设计鉴赏网站,网页制作心得2000字说明#xff1a; 虽然我们也可以通过筛选条件 WHERE 和 HAVING#xff0c;或者是限定返回记录的关键字 LIMIT 返回一条记录#xff0c;但是#xff0c;却无法在结果集中像指针一样#xff0c;向前定位一条记录、向后定位一条记录#xff0c;或者是 随意定位到某一条记录 …说明 虽然我们也可以通过筛选条件 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_salaryDOUBLE类型声明 OUT参数 total_countINT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值直到薪资总和 达到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; 结合使用