mysql使用存储过程批量给表加字段
背景:项目中,需要给几百张表添加相同的字段,手动添加比较费劲,于是打算使用存储过程实现。
编写的存储过程:
delimiter //-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROPPROCEDUREIFEXISTS updateTables;
-- 创建存储过程
CREATEPROCEDURE updateTables()
BEGIN
-- 定义变量
DECLARE s intDEFAULT0;
DECLARE tableName varchar(100);
DECLARE var_sql varchar(800);
DECLARE cnt INTDEFAULT0;
-- 定义游标,并将sql结果集赋值到游标中
DECLARE report CURSORFORselect table_name from information_schema.tables where table_schema="pbocbdms"and table_name like"ods_%";
-- 声明当游标遍历完后将标志变量置成某个值
DECLARECONTINUE HANDLER FORNOT FOUND SET s=1;
-- 打开游标
open report;
-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
fetch report into tableName;
-- 当s不等于1,也就是未遍历完时,会一直循环
while s<>1 do
-- 执行业务逻辑
SELECTcount(*) into cnt FROM information_schema.columns WHERE table_schema="pbocbdms"AND table_name = tableName AND column_name ="xm_code";
-- 列不存在则可以添加
IF cnt =0THEN
set var_sql = concat("alter table ",tableName," add column xm_code varchar(50) COMMENT "项目别名编码";");
set@sql= var_sql;
PREPARE s1 from@sql;
EXECUTE s1;
deallocateprepare s1;
ENDIF;
-- 继续抓取游标数据到变量
fetch report into tableName;
endwhile;
-- 关闭游标
close report;
END//
delimiter ;
调用存储过程
call updateTables();
以上是 mysql使用存储过程批量给表加字段 的全部内容, 来源链接: utcz.com/z/536393.html