MySQL:遍历数据库并在其上运行存储过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL:遍历数据库并在其上运行存储过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2312字,纯文字阅读大概需要4分钟。
内容图文
![MySQL:遍历数据库并在其上运行存储过程](/upload/InfoBanner/zyjiaocheng/883/f3a4938eeba443e48b3d101cddd91fb7.jpg)
我是MySQL的新手,我有一个存储过程想添加到几个旧数据库中.我正在使用SQLyog,我想遍历连接上的每个数据库,如果它与“ application _%”(数据库称为application_clientName,有几十个)匹配,则可以运行存储过程.
我可以保存并通过SQLyog运行的脚本是理想的.
我有点想遍历SHOW DATABASES中的所有数据库并运行一条语句,如果它们的名称是LIKE’application_%’.该语句将在该数据库中创建一个通用存储过程.
解决方法:
好的,看起来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,'\ndelimiter ;');
SELECT @output AS procs;
END//
delimiter ;
生成此过程后,请调用该过程:
CALL create_procedures();
这将输出单个列,其中包含为所有application_%表创建过程所需的SQL.选择整个列(会很长),并将其作为新的SQL查询执行.
我从未使用过SQLyog,但是如果不能正常使用,则可能需要使用MySQL的命令行界面.首先,生成一个包含以下内容的文件input.sql:
CALL create_procedures();
然后执行以下命令:
mysql -u <username> -p --database=<dbname> -N -r -B < input.sql > proc.sql
mysql -u <username> -p --database=<dbname> < proc.sql
更改< username>和< dbname>设置为适当的值(< dbname>可以是您有权访问的任何数据库).如果没有遇到任何错误,则应该为每个数据库定义存储过程.
内容总结
以上是互联网集市为您收集整理的MySQL:遍历数据库并在其上运行存储过程全部内容,希望文章能够帮你解决MySQL:遍历数据库并在其上运行存储过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。