MYSQL存储过程,为分表添加字段

本文介绍了一种通过存储过程批量为不同机构ID对应的分表添加新字段的方法。使用MySQL存储过程,动态生成并执行ALTER TABLE语句,为一系列以机构ID为后缀的T_USER表增加姓名、性别和年龄等字段。

    首先说下场景,现在有一个数据表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 $

 

转载于:https://my.oschina.net/simpleton/blog/917202

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值