Mysql那些事兒之(十四)光標的使用
相關鏈接:
Mysql那些事兒之(一)mysql的安裝
http://www.BkJia.com/database/201210/162314.html;
Mysql那些事兒之(二)有關數據庫的操作
http://www.BkJia.com/database/201210/162315.html;
Mysql那些事兒之(三)有關數據表的操作
http://www.BkJia.com/database/201210/162316.html;
Mysql那些事兒之(四)數據表數據查詢操作
http://www.BkJia.com/database/201210/162317.html;
Mysql那些事兒之(五)操作時間
http://www.BkJia.com/database/201210/162318.html;
Mysql那些事兒之(六)字符串模式匹配
http://www.BkJia.com/database/201210/163969.html;
Mysql那些事兒之(七)深入select查詢
http://www.BkJia.com/database/201210/163970.html;
Mysql那些事兒之(八)索引
http://www.BkJia.com/database/201210/163971.html;
Mysql那些事兒之(九)常用的函數
http://www.BkJia.com/database/201210/164229.html;
Mysql那些事兒之(十)觸發器一
http://www.BkJia.com/database/201210/164516.html;
Mysql那些事兒之(十一)觸發器二
http://www.BkJia.com/database/201210/164766.html;
Mysql那些事兒之(十二)存儲過程
http://www.BkJia.com/database/201210/164795.html;
Mysql那些事兒之(十三)變量、條件的使用
http://www.BkJia.com/database/201211/165662.html
在存儲過程中可以使用光標對結果集進行循環處理,光標的使用包括光標的聲明、open、fetch、close。 www.2cto.com
語法如下:
Sql代碼
--聲明光標
DECLARE cur_name CURSOR FOR select_statement
--open光標
OPEN cursor_name
--FETCH 光標
FETCH cursor_name INTO var_name [,var_name....]
--close光標
CLOSE cursor_name
舉例說明:
Sql代碼
delimiter $$ --將;結束符改變為$$
--創建存儲過程
CREATE PROCEDURE payment_amount()
BEGIN
---聲明變量
DECLARE i_staff_id int;
DECLARE d_amount decimal(5,2);
---聲明一個光標,獲取表payment裡的staff_id,amount列的值。
DECLARE cur_payment cursor for select staff_id,amount from payment;
---條件處理,判斷循環結束的條件是 捕獲NOT FOUND條件。
---當fecth 找不到下一條記錄時,就會關閉光標,退出過程。
DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_payment;
set @x1 = 0;
set @x2 = 0;
----打開光標
OPEN cur_payment;
REPEAT
FETCH cur_payment INTO i_staff_id,d_amount;
if i_staff_id = 2 then
set @x1 = @x1 + d_amount;
else
set @x2 = @x2 + d_amount;
end if;
UNTIL 0 END REPEAT;
CLOSE cur_payment;
END;
$$
delimiter ;
DECLARE定義是有順序的:變量和條件必須放在前面、然後是光標的聲明、最後才可以是 處理程序的聲明。