DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `SpInsertZgyTagMap`$$
CREATE DEFINER=`root`@`%` PROCEDURE `SpLoop`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_str VARCHAR(1000);
DECLARE v_next INT ;
DECLARE v_COUNT INT DEFAULT 0;
DECLARE v_start INT ;
DECLARE v_search LONGTEXT;
DECLARE v_tagtemp VARCHAR(1000);
DECLARE v_tmpStr LONGTEXT;
DECLARE zgyid INT ;
DECLARE zgytags VARCHAR(1000);
DECLARE My_Cursor CURSOR FOR SELECT * FROM `curtable`; -- 查出需要的集合放到游标中
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -- 放在游标的声明之后,
OPEN My_Cursor; -- 打开游标
loop_1:LOOP
FETCH NEXT FROM My_Cursor INTO curid,curtags; -- 读取第一行数据
IF done = 1 -- 一定要有循环跳出条件
THEN
LEAVE loop_1;
END IF;
SET v_str = CONCAT(curtags,';'); -- 对某一个字段进一步循环处理,以';'分割
WHILE
LOCATE(';',v_str) > 0
DO
SET v_start = LOCATE(';',v_str) ;
SET v_lengthSearch = LENGTH(v_str);
SET v_tagtemp = SUBSTRING(v_str,1,v_start-1);
-- TODO:加处理条件
SET v_str = SUBSTRING(v_str,v_start+1,v_lengthSearch - v_start);
END WHILE;
END LOOP;
CLOSE My_Cursor; -- 关闭游标
END$$
DELIMITER ;
以上主要是用来实现游标触发器+字符串切分后循环.