Chinaunix首页 | 论坛 | 博客
  • 博客访问: 477961
  • 博文数量: 99
  • 博客积分: 3621
  • 博客等级: 中校
  • 技术积分: 1089
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 16:29
文章存档

2012年(21)

2011年(28)

2010年(50)

分类: Mysql/postgreSQL

2010-07-18 12:38:32

在做开发的过程中,会往数据库里写入很多测试的垃圾数据,到数据库需要正式发布的时候,这些测试数据必须清理掉。前面有同事用一条条delete 命令,组合成一个SQL文件去执行,很冗长,也很繁琐。于是思考能否做成一个通用的存储过程,只需要传入需要清理的数据库名称,然后自动清除所有的测试数据呢?晚上找时间写了如下的存储过程,在MYSQL5.1.42版本测试通过。

CREATE PROCEDURE Clear_DB(
        DB_NAME varchar(50) # 数据库名称
  )
BEGIN
  DECLARE done INT DEFAULT 0; #游标的标志位
  DECLARE a varchar(20);
  DECLARE b varchar(20);
  DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME ;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
  OPEN cur1;
  REPEAT
    FETCH cur1 INTO a;
    IF NOT done THEN
       set b=concat('Delete from ',DB_NAME,'.',a); # 拼删除命令
       # set b=concat('TRUNCATE from ',DB_NAME,'.',a); # 拼删除命令
       SET @E=b;
       PREPARE stmt1 FROM @E;
          EXECUTE stmt1; # 执行命令
          DEALLOCATE PREPARE stmt1; #释放对象
    END IF;
  UNTIL done END REPEAT;
  CLOSE cur1;
END;


阅读(1320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~