Mysql 存储过程执行动态sql

CREATE DEFINER=`root`@`%` PROCEDURE `cscb`.`update_follow_uid_tables_and_delete_tables`(OUT `msgno` int(11), OUT `errtext` varchar(4000))
begin
	
    DECLARE v_table_name VARCHAR(255);
    DECLARE not_found INT DEFAULT 0;
    declare v_count INT DEFAULT 0;
    DECLARE cur CURSOR FOR  -- 声明游标
        SELECT DISTINCT table_name as  table_name
        FROM information_schema.columns 
        WHERE column_name = 'follow_uid' AND table_name NOT LIKE '%bak';  -- 此查询语句是查询的包含此follow_uid字段的表
 Declare continue handler for not found set not_found = 1; -- 游标中没有结果集 执行此语句
   Declare exit handler for Sqlexception begin
	   GET DIAGNOSTICS CONDITION 1 
	   errtext = MESSAGE_TEXT;
	   set msgno = -1,errtext=concat(errtext,'update_follow_uid_tables_and_delete_tables');
	  Rollback; 
    End;
      
    OPEN cur; -- 打开游标
        FETCH cur INTO v_table_name; -- 取出数据
      
		   while not_found=0
		 do
        -- 更新操作 准备动态sql
	         if LOCATE('contact', v_table_name)>0 then
				SET @create_stmt= CONCAT('CREATE table ', v_table_name, '_bak_2024726 as ',' select * from ',v_table_name,'  where follow_uid=32;'); 
	         end if;
			PREPARE create_stmt FROM @create_stmt; -- 初始化一个sql 语句
	        EXECUTE create_stmt; -- 执行sql语句
	        DEALLOCATE PREPARE create_stmt; -- 释放资源
	    FETCH cur INTO v_table_name;   
	    End while;   
    CLOSE cur;
       
set msgno=0;
set errtext='ok';
       
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值