在工作中,我們在寫存儲過程的時候,經常會遇到循環查詢語句結果或循環某張表,如果表的記錄數比較少,我們考慮使用遊標,如果數據量比較多的時候,使用遊標就顯得不夠用了。使用遊標,性能都會降低。因此,在實際工作中,我們一般基本上都不會使用遊標來解決問題。需要用遊標的時候,我們一般都會使用代替遊標的方案,給查詢結果或者某張表添加一個rownum字段,通過循環rownum自增長來實現。廢話不多說,看代碼。
DROP PROCEDURE IF EXISTS `pd_shop_direct_selling_list`;
CREATE PROCEDURE pd_shop_direct_selling_list
BEGIN
DECLARE _count int DEFAULT 0;
DECLARE i int DEFAULT 1;
DECLARE _user_id int;
-- 統計總數
SELECT count(id) INTO _count from pd_shop_direct_selling;
-- 創建臨時表保存數據
DROP table IF EXISTS temp_shop_direct_selling;
create table temp_shop_direct_selling
-- 產生rownum
SELECT @rownum:=@rownum+1 rownum, t.id,t.user_id,t.pid From
(SELECT @rownum:=0,a.id,user_id,pid FROM pd_shop_direct_selling a WHERE id!='' ORDER BY id limit 10) t ;
-- 循環
WHILE(i <= _count)
DO
SELECT user_id into _user_id from temp_shop_direct_selling t where t.rownum=i; -- 通過rownum獲取一行字段信息
call pd_procedure_tj_selling(_user_id);
set i=i+1;
END WHILE ;
DROP TABLE temp_shop_direct_selling;
end