Mysql存儲過程關於遊標的解決方案

在工作中,我們在寫存儲過程的時候,經常會遇到循環查詢語句結果或循環某張表,如果表的記錄數比較少,我們考慮使用遊標,如果數據量比較多的時候,使用遊標就顯得不夠用了。使用遊標,性能都會降低。因此,在實際工作中,我們一般基本上都不會使用遊標來解決問題。需要用遊標的時候,我們一般都會使用代替遊標的方案,給查詢結果或者某張表添加一個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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章