日期:2014-05-16 浏览次数:20765 次
DELIMITER $$ USE `mydatabase`$$ DROP PROCEDURE IF EXISTS `updateA`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `updateA`() BEGIN DECLARE id INT ; DECLARE STOP INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT a.id FROM a ; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET STOP=1; OPEN cur; FETCH cur INTO id ; WHILE STOP <> 1 DO -- 各种判断 CALL myProcs(id); -- 读取下一行的数据 FETCH cur INTO id ; END WHILE; -- 循环结束 CLOSE cur; -- 关闭游标 END$$ DELIMITER ;
DELIMITER $$ USE `mydatabase`$$ DROP PROCEDURE IF EXISTS `myProcs`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `myProcs`(IN MAIN_ID INT) BEGIN DECLARE ID INT ; DECLARE brandId VARCHAR(255); DECLARE l_find_pos INT; DECLARE l_new_string VARCHAR(255); DECLARE STOP INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT a.id ,aitem.brandId FROM a LEFT JOIN aitem ON a.id=aitem.aId WHERE a.id=MAIN_ID ; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET STOP=1; SET l_new_string=''; OPEN cur; FETCH cur INTO id,brandId; WHILE STOP <> 1 DO -- 各种判断 SET l_find_pos=INSTR(l_new_string,brandId); IF (l_find_pos=0) THEN SET l_new_string = CONCAT(brandId,',',l_new_string); END IF; -- 读取下一行的数据 FETCH cur INTO id,brandId; END WHILE; -- 循环结束 CLOSE cur; -- 关闭游标 #SET ttt=l_new_string; IF (LENGTH (l_new_string)>0) THEN SET l_new_string = LEFT(l_new_string,LENGTH (l_new_string)-1); END IF; UPDATE a SET brandId = l_new_string WHERE a.id=MAIN_ID ; END$$ DELIMITER ;