Mysql 批量修改欄位儲存過程
DROP PROCEDURE IF EXISTS batchUpdateColumn;
-- 建立batchUpdateColumn
CREATE PROCEDURE batchUpdateColumn(IN tableName varchar(64),IN oldType varchar(64), IN newType varchar(64))
BEGIN
-- 定義變數,遊標
DECLARE tn varchar(64);
DECLARE cn varchar(64);
DECLARE done INT;
-- 定義結果集,查出表名與欄位
DECLARE rs CURSOR FOR (SELECT TABLE_NAME as tn,COLUMN_NAME as cn FROM INFORMATION_SCHEMA.columns WHERE TABLE_SCHEMA = tableName AND COLUMN_TYPE = oldType);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN rs;
-- 開始迴圈
read_loop: LOOP
FETCH NEXT from rs INTO tn,cn;
IF done THEN
LEAVE read_loop;
END IF;
-- 拼接修改欄位sql
SET @tempsql = CONCAT('ALTER TABLE ',tn,' MODIFY COLUMN ',cn,' ', newType);
-- 執行sql
PREPARE stmt FROM @tempsql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE rs;
END;
-- 呼叫儲存過程
call batchUpdateColumn('lyf','varchar(10)','varchar(30)');