mysql存储过程动态表名字符拼接_求一个 MySQL的存储过程,给一个数据库里面所有的表都追加一个字段(表名没有规律)...

展开全部

方案一: 存储过程DROP PROCEDURE IF EXISTS SP_COLUMN_ADD;

DELIMITER $$

CREATE PROCEDURE SP_COLUMN_ADD()

BEGIN

DECLARE command VARCHAR(200);

DECLARE founded INT DEFAULT 1;

DECLARE column_duplicated BOOLEAN DEFAULT FALSE;

#把这个游标的语句查下,是否满足需求

DECLARE cur_sleest CURSOR FOR

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' ADD COLUMN YOUR_COLUMN YOUR_TYPE;') AS SQL_COMMAND

#eg: `ALTER TABLE TMP_SLEEST ADD COLUMN C1 INT,ADD COLUMN C2 VARCHAR(2);`

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA="yourschema"

AND TABLE_TYPE="BASE TABLE";

DECLARE CONTINUE HANDLER FOR NOT FOUND SET founded = 0;

DECLARE CONTINUE HANDLER FOR 1060 SET column_duplicated = true;

OPEN cur_sleest;

sleet_loop : LOOP

FETCH cur_sleest INTO command;

IF founded = 0 THEN LEAVE sleet_loop; END IF;

SET @32313133353236313431303231363533e58685e5aeb931333361313233sql := command;

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

END LOOP sleet_loop;

CLOSE cur_sleest;

END$$

DELIMITER ;

方案二: 扫出指令集合到本地文件,贴到命令行执行SELECT CONCAT("ALTER TABLE ", TABLE_NAME," ADD COLUMN YOUR_COLUMN YOUR_TYPE;")

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA="yourschema"

AND TABLE_TYPE="BASE TABLE"

INTO OUTFILE 'D:\\add-column.sql'

不推荐存储过程, 因为可能要处理1060(duplicated column)等问题, 存储过程不是很好弄,中间过程也不好跟踪, 不一定能查出哪里错了;

第二种方案直接在命令行中贴上,每一个句话正确错误一看就明了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值