一段mysql存储过程为什么就是执行不了呢代码解释:查询出sz8_news库中所有的空表并把这些表删除掉。SQL code
一段mysql存储过程为什么就是执行不了呢
代码解释:查询出sz8_news库中所有的空表并把这些表删除掉。
SQL codebegin/*局部变量的定义 */declare tmpName varchar(20) default '' ;/*定义游标*/DECLARE reslutList Cursor FOR select table_name from information_schema.tables where table_rows <1 and table_schema = 'sz8_news' order by table_rows desc; -- DECLARE reslutList CURSOR FOR select id FROM sz8_news.systemmenu; declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;OPEN reslutList;/*打开游标*/FETCH reslutList into tmpname; -- 取数据/* 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 */ WHILE ( tmpname is not null) DO set tmpName = CONCAT(tmpName ,";") ; -- 删除这张空表 drop table sz8_news.tmpname; /*游标向下走一步*/ FETCH reslutList INTO tmpname; END WHILE;CLOSE reslutList; /*关闭游标*/end
tmpname应该是一个变量,但怎么原样输出了呢。所以drop table sz8_news.tmpname;这句执行不了。提示没有tmpname这张表。
[解决办法]begin
/*局部变量的定义 */
declare tmpName varchar(20) default '' ;
/*定义游标*/
DECLARE reslutList Cursor FOR select table_name from information_schema.tables where table_rows <1 and table_schema = 'sz8_news' order by table_rows desc;
-- DECLARE reslutList CURSOR FOR select id FROM sz8_news.systemmenu;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;
OPEN reslutList;/*打开游标*/
FETCH reslutList into tmpname; -- 取数据
/* 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 */
WHILE ( tmpname is not null) DO
set tmpName = CONCAT(tmpName ,";") ;
-- 删除这张空表
set @sql = concat('drop table sz8_news.',tmpname);
PREPARE stmt1 FROM @sql ;
EXECUTE stmt1 ;
DEALLOCATE PREPARE stmt1;
/*游标向下走一步*/
FETCH reslutList INTO tmpname;
END WHILE;
CLOSE reslutList; /*关闭游标*/
end