业务背景:
当前,我有多个同前缀的数据库(test前缀)
拥有该前缀的数据库里,都有一张right表
现在我们要把,test前缀数据库下的right表的字段name,长度变成1000.
实现SQL
-- 清除存储过程
DROP PROCEDURE IF EXISTS alter_col;
-- 定义新的分隔符
DELIMITER //
-- 创建存储过程
CREATE PROCEDURE alter_col ( ) BEGIN
-- 定义循环条件
DECLARE
flag INT DEFAULT 0;
-- 声明变量
DECLARE
db VARCHAR (50);
DECLARE
execSql VARCHAR (50);
DECLARE
result CURSOR FOR SELECT
SCHEMA_NAME
FROM
INFORMATION_SCHEMA.SCHEMATA
WHERE
SCHEMA_NAME like 'test%';
-- 退出循环
DECLARE
CONTINUE HANDLER FOR SQLSTATE '02000'
SET flag = 1;
-- 打开游标
OPEN result;
WHILE
flag <> 1 DO
FETCH result INTO db;
SET @execSql = CONCAT( 'ALTER TABLE `', db,'`.`right` MODIFY COLUMN name varchar(70);' );
PREPARE stmt FROM @execSql;
EXECUTE stmt;
END WHILE;
CLOSE result;
END //
-- 还原默认分隔符
DELIMITER ;
-- 调用存储过程
call alter_col();
-- 清除存储过程
drop procedure if exists alter_col;