需求:
清空 show tables like "%2016%"
实现:
DELIMITER //
drop procedure if exists p_clean_table;
create PROCEDURE p_clean_table(in tab varchar(128))
begin
DECLARE name VARCHAR(64);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
DECLARE tables_cur CURSOR FOR select table_name from information_schema.tables where table_schema='eqiurong' and table_name like '%2016%';
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN tables_cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH tables_cur INTO name;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
set @bsql :=concat("drop table if exists ",name);
PREPARE STMT FROM @bsql;
EXECUTE STMT ;
END LOOP;
-- 关闭游标
CLOSE tables_cur;
end;
//
DELIMITER ;
ps:
存储过程语法:
create PROCEDURE p_xx(in p1 varchar(128),out p2 varchar(128))
begin
............
end;