Mysql 删除当前选定数据库中所有表的索引

Mysql 删除当前选定数据库中所有表的索引,mysql,stored-procedures,nested-loops,Mysql,Stored Procedures,Nested Loops,我试图删除外键生成的所有索引,为此我编写了一个存储过程,但MySQL服务器抱怨语法,过程如下: DROP PROCEDURE IF EXISTS usp_DropIndexOfTables; DELIMITER $$ CREATE PROCEDURE usp_DropIndexOfTables() BLOCK1: BEGIN DECLARE finished INTEGER DEFAULT 0; DECLARE v_table varchar(200) DEFAULT ""; DEClA

我试图删除外键生成的所有索引,为此我编写了一个存储过程,但MySQL服务器抱怨语法,过程如下:

DROP PROCEDURE IF EXISTS usp_DropIndexOfTables;
DELIMITER $$
CREATE PROCEDURE usp_DropIndexOfTables()
BLOCK1: BEGIN
 DECLARE finished INTEGER DEFAULT 0;
 DECLARE v_table varchar(200) DEFAULT "";
  DEClARE table_cursor CURSOR FOR

         SELECT TABLE_NAME from information_schema.tables where TABLE_SCHEMA=(SELECT DATABASE());

 DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

    OPEN table_cursor; 
    LOOP1: loop
           FETCH table_cursor INTO v_table;
            IF finished = 1 THEN 
             CLOSE table_cursor;
         leave LOOP1;
            END IF;

        BLOCK2: BEGIN
              DECLARE v_finished INTEGER DEFAULT 0;
              DECLARE v_index varchar(200) DEFAULT "";
              DEClARE index_cursor CURSOR FOR 
        SELECT INDEX_NAME   FROM INFORMATION_SCHEMA.STATISTICS
                    WHERE TABLE_SCHEMA = (SELECT DATABASE())   AND INDEX_NAME in ( SELECT CONSTRAINT_NAME  FROM     INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS  
                    WHERE CONSTRAINT_SCHEMA = (SELECT DATABASE())   AND TABLE_NAME = v_table);
                    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
        OPEN index_cursor; 
        LOOP2: loop
        FETCH index_cursor INTO v_index;
        IF v_finished = 1 THEN 
        close index_cursor;
            leave LOOP2;
        END IF;
        SET @v_query = CONCAT('DROP INDEX ',v_index,' ON ', v_table);
                PREPARE stmt FROM @v_query;
                EXECUTE stmt;
                DEALLOCATE PREPARE stmt;
                END loop LOOP2
              END BLOCK2;
  END loop LOOP1;
END BLOCK1;

END$$
DELIMITER ;

CALL usp_DropIndexOfTables()    
我不知道我做错了什么

错误

mysql> source dropIndexs.sql;
Query OK, 0 rows affected, 1 warning (0.00 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END BLOCK2;
  END loop LOOP1;
END BLOCK1;

END' at line 39
ERROR 1305 (42000): PROCEDURE dbname.usp_DropIndexOfTables does not exist

运行过程时出现了什么错误???@BK435添加了有问题的错误。“END loop LOOP2”后面没有分号。您是否尝试过在它之后放置一个并重新运行创建过程?很好的捕获,谢谢,但它现在显示
mysql>source dropIndexs.sql;查询正常,0行受影响(0.00秒)查询正常,0行受影响(0.00秒)错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行查询“END”附近使用的正确语法,好的,受影响的0行(0.43秒)
,如果我猜的话,因为该错误告诉我的不多,除了第1行的“END”有问题外,但没有结尾……我会看看您的
END$$分隔符行…我认为有点不对劲…请仔细检查语法,确保您正在结束您认为正在结束的内容。。。