mysql游標的使用:對查詢的結果進行遍歷
游標
游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。 游標充當指針的作用。 盡管游標能遍歷結果中的所有行,但他一次只指向一行。 游標的作用就是用於對查詢數據庫所返回的記錄進行遍歷,以便進行相應的操作。
-- 生成所有父id; -- 分隔標記 delimiter $$ -- 創建存儲過程 create procedure testCur() BEGIN -- 聲明變量 DECLARE cid BIGINT; DECLARE done INT; -- 創建游標,並設置游標所指的數據(這里設置ID不為1是因為ID為1的是總的大類) DECLARE cur CURSOR for SELECT id as cid from mdm_material_category where parent_id!='1' and id!='1'; -- 游標執行完,即遍歷結束。設置done的值為1 DECLARE CONTINUE HANDLER for not FOUND set done=1; -- 開啟游標 open cur; -- 執行循環 posLoop:LOOP -- 如果done的值為1,即遍歷結束,結束循環 IF done=1 THEN LEAVE posLoop; -- 注意,if語句需要添加END IF結束IF END IF; -- 從游標中取出cid FETCH cur INTO cid; -- 以游標中取出的cid為索引,逐行更新分類表:某分類parent_ids值為它的父分類parent_ids值和它父類的id UPDATE mdm_material_category m1,mdm_material_category m2 SET m1.parent_ids=CONCAT(m2.parent_ids,',',m2.id) where m1.parent_id=m2.id and m1.id=cid; -- 關閉循環 END LOOP posLoop; -- 關閉游標 CLOSE cur; -- 關閉分隔標記 END $$
對於上述代碼有幾個需要注意的地方:
1.mysql存儲過程每一句后面必須用;結尾,使用的臨時字段需要在定義游標之前進行聲明。
2. 在mysql中對於變量的聲明(Declare)只能在存儲過程中。注意分隔標記的缺少可能會導致失敗。
接下來就是執行存儲過程:
CALL testCur;
刪除存儲過程:
DROP PROCEDURE testCur;
關於游標的使用就是如上了!
