drop procedure if exists replicate_index;
CREATE DEFINER=`root`@`%` PROCEDURE `replicate_index`(IN p_table_schema VARCHAR(255),IN p_table_name VARCHAR(255),IN p_column_name VARCHAR(255))
BEGIN
-- 这个s 是系统自带的 可以判断select取出的list 是否已经空了
DECLARE s int DEFAULT 0;
DECLARE p_indexName varchar(132);
DECLARE p_indexNames CURSOR FOR SELECT index_name FROM information_schema.statistics WHERE table_schema = p_table_schema and table_name = p_table_name and column_name = p_column_name;
-- 定义declare continue handler,这个会根据上下文是否有结果判断是否执行SET notfound = 1 这个不用看 是标准化的 系统会自动判断 如果集合里面空了 自动设置为1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
-- 使用select取出来的list 必须先open
OPEN p_indexNames;
-- 赋值 从_test1_name集合里面取出一个值 赋值给_corpid
FETCH p_indexNames INTO p_indexName;
WHILE s <> 1 DO
-- DROP INDEX indexName ON organization_index;
-- ALTER TABLE organization_index DROP INDEX indexName;
SET @STMT :=CONCAT("ALTER TABLE ",p_table_name," DROP index ",p_indexName,";");
#SELECT @STMT;
PREPARE STMT FROM @STMT;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
FETCH p_indexNames INTO p_indexName;
END WHILE;
-- 关闭游标
CLOSE p_indexNames;
-- 新增该字段索引
SET @ADDINDEX :=CONCAT("ALTER TABLE ",p_table_name," ADD INDEX ",p_column_name,"_INDEX (",p_column_name,");");
PREPARE STMT FROM @ADDINDEX;
EXECUTE STMT;
END
mysql游标循环去除重复的索引
猜你喜欢
转载自blog.csdn.net/qq_36836370/article/details/132280244
今日推荐
周排行