mysql使用存储过程批量给表加字段

database

背景:项目中,需要给几百张表添加相同的字段,手动添加比较费劲,于是打算使用存储过程实现。

编写的存储过程:

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

回到顶部