MYSQL对查询到的结果集执行update xxx(动态表名)方法

业务需求
1.将当前数据库里的所有表中的某一个字段修改成指定的值
2.思路分析:
2.1 :首先查询到当前库中的所有的表
2.2 :将查询到的表的信息修改成我们需要的sql语句 例:
update 动态表名 set xx=xx
2.3:外部采用存储过程来封装
2.3:内部采用游标的形式来编写,通过游标我们可以清楚的获取到查询到的结果集的每一行
2.4:在通过预处理的方式进行查询。
2.5:在查询的时候需要先判断当前表是否拥有该字段,如果没有拥有该字段则不进行修改,如果有了则进行修改

代码如下

#判断存储过程是否存在
DROP PROCEDURE IF EXISTS zhousan_tenant_id_2;
delimiter $
#创建存储过程
create PROCEDURE zhousan_tenant_id_2()
BEGIN
    DECLARE  zhoushan_name varchar(15000);   -- 表名
    DECLARE done INT DEFAULT 0;  -- 结束
    -- 定义游标,该sql是查询当前库下面的所有表
    DECLARE cur_account CURSOR FOR select table_name  from information_schema.tables where table_schema='gov_performance_communication'; 
    -- 将结束标志绑定到游标
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
     
    -- 打开游标
    OPEN  cur_account;    
    -- 遍历
    read_loop:LOOP
            # 取值 取多个字段
            FETCH  NEXT from cur_account INTO zhoushan_name;
						# 如果非0就代表结束
            IF done!=0 
						THEN
                LEAVE read_loop;
             END IF;	
				# 赋值,sql的含义是:查看当前表是否有当前字段,如果有则>0 	,并且将得到的结果赋值给count_column	 
						 set @select_column=concat("SELECT count(1) into @count_column FROM information_schema.columns WHERE table_name='",zhoushan_name,"' and column_name='tenant_id'");
						 # 准备预处理执行
						 PREPARE pr1 FROM @select_column;
EXECUTE pr1; 
DEALLOCATE PREPARE pr1;
# 判断是否拥有列名
 IF @count_column>0
 then
 # 有列名就进行修改
  		 set zhoushan_name=concat("update ",zhoushan_name," set tenant_id=2;");
			
set @select_name=zhoushan_name;
# 执行预处理
PREPARE pr2 FROM @select_name;
EXECUTE pr2;
DEALLOCATE PREPARE pr2;
	END IF;		
    END LOOP;
  
    CLOSE cur_account;
END $
#调用存储过程

call zhousan_tenant_id_2();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值