在前面的分析中可知sql的檢索操做返回的數據幾乎都是以整個集合的形式,也就是說sql善於將多條查詢記錄集中到一塊兒並返回,假若如今須要一行行地處理查詢的結果,這對於sql語句來講確實是個難題,好在存在一種稱爲遊標的技術能夠解決這個問題,所謂的遊標就就是能夠將檢索出來的數據集合保存在內存中而後依次取出每條數據進行處理,這樣就解決了sql語句沒法進行行記錄處理的難題,遊標的讀取圖解以下:mysql
原表:sql
批量(遊標)取值:fetch
fetch 遊標名稱 into @變量1,@變量2,@變量3。。。//這裏設置值跟查詢語句的列一一對應。因此別寫錯位置了spa
mysql存儲過程使用表名做爲參數-----------實現動態遊標3d
視圖部分。blog
例如上述,我寫的是利用遊標,清空對應的表,但會出現表「不存在」的狀況。內存
存儲過程語句:cmd
CREATE DEFINER=`root`@`%` PROCEDURE `sp_empty_table`()it
BEGINtable
declare flag int default 0;#定義標識變量用於判斷是否退出循環
declare tmp varchar(40);#定義臨時存儲變量
declare cur cursor for select name from view_all_table where name not LIKE 'sys_%' ;#聲明遊標
declare continue handler for not found set flag = 1; #異常處理並設置flag=1
open cur; # 打開遊標
while flag!=1 do
fetch cur into tmp ;#從遊標中取值並存放到tmp中
if flag !=1 then
SET @sqlcmd = concat('truncate table ', tmp);
prepare stmt from @sqlcmd;
execute stmt;
deallocate prepare stmt;
#truncate table tmp;
end if;
end while;
close cur; #關閉遊標
END
本文來源於:宋文超super,專屬平臺有csdn、思否(SegmentFault)、 簡書、 開源中國(oschina),轉載請註明出處。