mysql使用存储过程批量给表加字段
短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
背景:项目中,需要给几百张表添加相同的字段,手动添加比较费劲,于是打算使用存储过程实现。
编写的存储过程:
delimiter //
-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS updateTables;
-- 创建存储过程
CREATE PROCEDURE updateTables()
BEGIN
-- 定义变量
DECLARE s int DEFAULT 0;
DECLARE tableName varchar(100);
DECLARE var_sql varchar(800);
DECLARE cnt INT DEFAULT 0;
-- 定义游标,并将sql结果集赋值到游标中
DECLARE report CURSOR FOR select table_name from information_schema.tables where table_schema="pbocbdms" and table_name like "ods_%";
-- 声明当游标遍历完后将标志变量置成某个值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 打开游标
open report;
-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
fetch report into tableName;
-- 当s不等于1,也就是未遍历完时,会一直循环
while s<>1 do
-- 执行业务逻辑
SELECT count(*) into cnt FROM information_schema.columns WHERE table_schema="pbocbdms" AND table_name = tableName AND column_name = "xm_code";
-- 列不存在则可以添加
IF cnt = 0 THEN
set var_sql = concat("alter table ",tableName," add column xm_code varchar(50) COMMENT "项目别名编码";");
set @sql = var_sql;
PREPARE s1 from @sql;
EXECUTE s1;
deallocate prepare s1;
END IF;
-- 继续抓取游标数据到变量
fetch report into tableName;
end while;
-- 关闭游标
close report;
END //
delimiter ;
调用存储过程
call updateTables();
原文地址:https://www.cnblogs.com/hdwang/archive/2022/04/03/16097550.html
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341