mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...
轉載: https://blog.csdn.net/weixin_42159024/article/details/81488788
實現功能:
升級數據庫。通過遍歷所有數據庫,對每個數據庫進行升級,通過新建表、字段升級。這里主要通過數據庫名.表名來實現在同一個存儲過程中切換不同數據庫。
drop procedure if exists addColumn;
drop procedure if exists updateDataBase;
delimiter $$;
--創建存儲過程:新增字段,傳入參數:數據庫名、表名、字段名、字段類型(int、VARCHAR...)
create procedure 'addColumn'(in dataName VARCHAR(100),in tableName VARCHAR(100),in columnName VARCHAR(100),in columnType VARCHAR(100))
BEGIN
DECLARE column_num int;
set @sqlstr=concat("select count(*) into @column_num from information_schema.columns where table_schema='",dataName,"' and table_name='",tableName,"' and column_name='",columnName,"'");
PREPARE sqlstr FROM @sqlstr;
EXECUTE sqlstr;
if @column_num=0 then
set @sqlstr=concat("alter table ",dataName,".",tableName," add column ",columnName,columnType);
PREPARE sqlstr FROM @sqlstr;
EXECUTE sqlstr;
end if;
END
$$
delimiter$$;
--創建存儲過程:更新數據庫,通過創建表及字段來升級數據庫
drop procedure if exists updateDataBase;
delimiter$$;
create procedure 'updateDataBase'()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE dataName VARCHAR(100);
DECLARE s int DEFAULT 0;
--將以ticket_開頭的數據庫遍歷
DECLARE consume CURSOR FOR select distinct table_schema as dataName from information_schema.'TABLES' where table_schema like 'ticket_%';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
OPEN consume;
FETCH consume into dataName;
while s<>1 DO
call addColumn(dataName,'tbl_dc_neinfo','isPassed',' varchar(128) DEFAULT NULL');--調用存儲過程,在表tbl_dc_neinfo中新建字段isPassed varchar(128) DEFAULT NULL
--新建表,在不同的數據庫中
set @sql_create_table=concat(
"CREATE TABLE IF NOT EXISTS ",dataName,"tbl_dc_neinfo",
"(
'OID' bigint(20) NOT NULL AUTO_INCREMENT,
'字段2' 類型,
PRIMARY KEY('OID')
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");
PREPARE sql_create_table FROM @sql_create_table;
EXECUTE sql_create_table;
FETCH consume INTO dataName;
end WHILE;
CLOSE consume;
END
$$;
delimiter$$;
call updateDataBase();
drop procedure if exists updateDataBase;
drop procedure if exists addColumn;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸽子汤怎么炖好喝又营养 鸽子汤的制作方法
- 下一篇: mysql的隔离级别_MySQL的四种事