读书人

一段mysql存储过程为什么就是执行不了

发布时间: 2012-03-23 12:06:21 作者: rapoo

一段mysql存储过程为什么就是执行不了呢
代码解释:查询出sz8_news库中所有的空表并把这些表删除掉。

SQL code
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 ,";") ;   -- 删除这张空表   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

读书人网 >其他数据库

热点推荐