- 定義存儲過程
DELIMITER $$
--數據庫名稱
USE `zycrm`$$
--刪除舊的存儲過程
DROP PROCEDURE IF EXISTS `u_head`$$
--定義新的存儲過程
CREATE PROCEDURE `u_head`(IN param_num INTEGER)
BEGIN
-- 該變量用於標識是否還有數據需遍歷
DECLARE flag INT DEFAULT 0;
-- 創建一個變量用來存儲遍歷過程中的值
DECLARE id BIGINT(40);
-- 查詢出需要遍歷的數據集合
DECLARE idList CURSOR FOR (SELECT id FROM ws_shop WHERE id < param_num );
-- 查詢是否有下一個數據,沒有將標識設爲1,相當於hasNext
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
-- 打開遊標
OPEN idList;
-- 取值設置到臨時變量中
FETCH idList INTO id;
-- 遍歷未結束就一直執行
WHILE flag != 1 DO
-- targetSQL //你想要執行的目標功能,這裏可以寫多個SQL
-- 注意
-- 這裏有一個坑,目標語句引用臨時變量,實測發現不需要加@符號,但是搜索到的結果都是例如:@id ,這樣來使用,實測發現無法取到數據
-- 注意
INSERT INTO ws_shop SET shopName = id;
-- 定要記得把遊標向後移一位,這個坑我替各位踩過了,不需要再踩了
FETCH idList INTO id;
END WHILE;
CLOSE idList;
END$$
DELIMITER ;
- 調用存儲過程
CALL u_head (10) ;