首先说下场景,现在有一个数据表T_USER,分成了多张表,根据不同的机构ID作为表名后缀,如T_USER_001,T_USER_002这样的,现在需要增加一些字段,用存储过程实现。
思路:首先查询出所有的机构ID,然后以前缀T_USER_和机构ID拼接成表名,执行ALTER操作。
delimiter $
BEGIN
declare T_TMP_NAME varchar(100);
declare org_id varchar(32);
declare tmpSqlStr varchar(500);
declare tmpSqlToRun varchar(500);
DECLARE done INT DEFAULT FALSE;
DECLARE t_error INTEGER DEFAULT 0;
DECLARE rs CURSOR FOR SELECT id FROM CORE_ORG;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
START TRANSACTION;
OPEN rs;
read_loop: LOOP
FETCH NEXT FROM rs INTO org_id;
IF done THEN
LEAVE read_loop;
END IF;
-- 组装表名
SET T_TMP_NAME = CONCAT('T_USER',ORG_ID);
set tmpSqlStr = " ";
set tmpSqlStr = concat(tmpSqlStr ," ALTER TABLE " , T_TMP_NAME);
set tmpSqlStr = concat(tmpSqlStr ," ADD COLUMN `NAME` varchar(100) NULL COMMENT '姓名' ," );
set tmpSqlStr = concat(tmpSqlStr ," ADD COLUMN `GENDER` varchar(8) NULL COMMENT '性别' ," );
set tmpSqlStr = concat(tmpSqlStr ," ADD COLUMN `AGE` INT NULL COMMENT '年龄' ;" );
SET @sql = tmpSqlStr;
prepare tmpSqlToRun from @sql;
EXECUTE tmpSqlToRun;
END LOOP;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
CLOSE rs;
END $