mysql树遍历存储过程_MySQL:遍历数据库并在其上运行存储过程

好的,看起来information_scheme数据库中的SCHEMATA表包含所有数据库的列表.因此,为了获取要在其上运行该过程的所有数据库的列表,可以执行以下操作:

SELECT schema_name FROM information_schema.schemata

WHERE schema_name LIKE 'application_%';

下一步是将其纳入某种程序.不幸的是,如果涉及创建过程,MySQL在执行动态生成的SQL方面做得不好.因此,我想出的纯SQL版本有点混乱.归结为首先创建“生成器”过程,然后调用它,最后执行生成器的结果:

delimiter //

DROP PROCEDURE IF EXISTS create_procedures//

CREATE PROCEDURE create_procedures()

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE db VARCHAR(255);

DECLARE appDBs CURSOR FOR SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'application_%';

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

SET @procName = "simpleproc"; -- Change this to your proc name

SET @output = "delimiter //";

OPEN appDBs;

REPEAT

FETCH appDBs INTO db;

IF NOT done THEN

-- Replace this procedure declaration with your procedure.

-- Make sure to keep the ',db,' syntax there.

-- You should really only have to change the parameters

-- and the stuff between the BEGIN and END clauses.

SET @output = CONCAT(@output,'

DROP PROCEDURE IF EXISTS ',db,'.',@procName,'//

CREATE PROCEDURE ',db,'.',@procName,'()

BEGIN

SELECT 1;

END//');

END IF;

UNTIL done END REPEAT;

CLOSE appDBs;

SET @output = CONCAT(@output,'

delimiter ;');

SELECT @output AS procs;

END//

delimiter ;

生成此过程后,请调用该过程:

CALL create_procedures();

这将输出单个列,其中包含为所有application_%表创建过程所需的SQL.选择整个列(会很长),并将其作为新的SQL查询执行.

我从未使用过SQLyog,但是如果不能正常使用,则可能需要使用MySQL的命令行界面.首先,生成一个包含以下内容的文件input.sql:

CALL create_procedures();

然后执行以下命令:

mysql -u -p --database= -N -r -B < input.sql > proc.sql

mysql -u -p --database= < proc.sql

更改< username>和< dbname>设置为适当的值(< dbname>可以是您有权访问的任何数据库).如果没有遇到任何错误,则应该为每个数据库定义存储过程.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值