游標可以看作一種數據類型,可以用來遍歷結果集,相當於指針或者是數組的下標。處理結果集的方法可以通過游標定位到結果集的某一行,從當前結果集的位置搜索一行或一部分行或者對結果集中的當前行進行數據修改。
注:使用了游標時,應當盡量避免在游標循環中進行表的鏈接操作。
在具體使用游標時,游標必須在處理程序之前且在變量和條件之後聲明,最後一定要關閉。
由於使用游標需要把結果集中的紀錄一條條取出來處理,增加了服務器的負擔,使用游標處理結果集的效率較低。
[例]實現的功能為統計工資大於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