游标可以看作一种数据类型,可以用来遍历结果集,相当于指针或者是数组的下标。处理结果集的方法可以通过游标定位到结果集的某一行,从当前结果集的位置搜索一行或一部分行或者对结果集中的当前行进行数据修改。
注:使用了游标时,应当尽量避免在游标循环中进行表的链接操作。
在具体使用游标时,游标必须在处理程序之前且在变量和条件之后声明,最后一定要关闭。
由于使用游标需要把结果集中的纪录一条条取出来处理,增加了服务器的负担,使用游标处理结果集的效率较低。
[例]实现的功能为统计工资大于999的员工人数,本实例主要用来演示如何使用游标
mysql> CREATE PROCEDURE em_count
-> (OUT NUM INT)
-> BEGIN
-> DECLARE emp_sal INT;
-> DECLARE flag INT;
-> DECLARE cursor_em CURSOR FOR SELECT sal FROM employee;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag =1;
-> SET flag=0;
-> SET NUM=0;
-> OPEN cursor_em;
-> FETCH cursor_em INTO emp_sal;
-> WHILE flag<>1 DO
-> IF emp_sal >999 THEN
-> SET NUM=NUM+1;
-> END IF;
-> FETCH cursor_em INTO emp_sal;
-> END WHILE;
-> CLOSE cursor_em;
-> END$
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL em_count(@count);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @count;
+--------+
| @count |
+--------+
| 13 |
+--------+
1 row in set (0.00 sec)
除了使用while ... end while 遍历结果集外还可以使用:loop ... and loop 或 repeat ... and repeat