本文共 684 字,大约阅读时间需要 2 分钟。
DELIMITER $$ DROP PROCEDURE IF EXISTS `p_optimize_table`$$ CREATE PROCEDURE `p_optimize_table`() BEGIN DECLARE SQLStr1 VARCHAR(1000); DECLARE done INT DEFAULT FALSE; # 遍历数据结束标志 DECLARE cur CURSOR FOR SELECT CONCAT('OPTIMIZE TABLE ',table_name,';') AS sq FROM information_schema.TABLES WHERE TABLE_SCHEMA= DATABASE() AND ENGINE='MyISAM' ; # 将结束标志绑定到游标 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; # 打开游标 OPEN cur; # 开始循环 read_loop:LOOP # 提取游标里的数据,这里只有一个,多个的话也一样; FETCH cur INTO SQLStr1; # 声明结束的时候 IF done THEN LEAVE read_loop; END IF; # 这里做你想做的循环的事件 SELECT @str:=SQLStr1; PREPARE sq FROM @str; EXECUTE sq; DEALLOCATE PREPARE sq; END LOOP; # 关闭游标 CLOSE cur; END$$ DELIMITER ;转载地址:http://hofmi.baihongyu.com/