1 定義:對SELECT語句取得的結果進行一件一件處理的功能。
2 指針:確定當前記錄的信息,可以理解爲內存中保存此記錄的“地址”,在遊標處理中,通過移動指針來進行逐行的數據處理。
3 聲明遊標
declare 遊標名 cursor for select 語句;
4 打開遊標
open 遊標名;
使用遊標時,必須執行聲明過的遊標,取得具體的記錄集合,即需要打開遊標。
5 保存指針數據到變量中
fetch 遊標名 into 變量名,...;
6 讀取了所有遊標記錄後的處理
(1)例外處理:declare 處理種類 handler for 例外的種類 例外發生時的處理;
(2)例外種類決定完成例外發生時的處理後應該如何動作,可以指定EXIT(立即結束處理)或CONTINUE(繼續下面的處理,即fetch…into後還會繼續執行)。
7 關閉遊標
close 遊標名;
8 例子
mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_cursor(
-> OUT p_result TEXT
-> )
-> BEGIN
-> DECLARE flag BIT DEFAULT 0;
-> DECLARE tmp VARCHAR(20);
-> DECLARE cur CURSOR FOR SELECT DISTINCT depart FROM employee;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
-> OPEN cur;
-> WHILE flag!=1 DO
-> FETCH cur INTO tmp;
-> IF flag!=1 THEN
-> SET p_result=CONCAT_WS(',',p_result,tmp);
-> END IF;
-> END WHILE;
-> CLOSE cur;
-> END
-> //