-- 2022-05-03 星期二 1924 mysql存储过程-游标 
-- 参考:https://wenku.baidu.com/view/4cc6c15b158884868762caaedd3383c4ba4cb453.html
/**
SHOW CREATE PROCEDURE drop_copy;#查看已经创建的-存储过程
CALL drop_copy();#调用存储过程
-- SHOW PROCEDURE STATUS LIKE 'drop_copy';

*/
drop procedure drop_copy; #删除存储过程
create PROCEDURE drop_copy()
begin
 # 声明变量(根据自己的需求去修改),varchar 类型要指定长度
	DECLARE merchantName VARCHAR(255); #写自己的注释
	#这一行一定要上面的可以根据自己的逻辑写多少都行
	DECLARE done INT DEFAULT 0;
	DECLARE cur CURSOR FOR
	 #开始执行查询语句并把查询出的值赋值给变量,类型与下面这种,记着一定要以 ";"结尾。
	  select table_name as merchantName from information_schema.tables 
			where table_schema ='group_ad' and table_name like '%_copy1';
	#游标执行完,即遍历结束。设置done的值为1
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
  OPEN cur;  #开启游标  
  posLoop:LOOP #执行循环
		FETCH cur INTO merchantName; #要和声明的变量对应上不能少写,done除外				
        IF done=1 THEN LEAVE posLoop;	 #如果done的值为1,即遍历结束,结束循环                						
				END IF;#注意 if语句需要添加END IF结束IF
			select now();			
			set @stmt = concat('drop table ',merchantName);# 定义语句			
			PREPARE stmt from @stmt; #预定义sql语句,从变量中获取			
			EXECUTE stmt; #执行sql语句			
			DEALLOCATE PREPARE stmt; #释放资源,后续还可以使用
	END LOOP posLoop;#关闭循环	
	CLOSE cur;#关闭游标
end;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐