版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qwkxq/article/details/55002944
DELIMITER $
DROP PROCEDURE listAllDB;
CREATE PROCEDURE listAllDB()
BEGIN
DECLARE no_more_record INT DEFAULT 0;
/*定义2个变量:temp用于记录游标每次next的值,schemaName表示将所有temp拼接后的值*/
DECLARE schemaName varchar(500) DEFAULT '';
DECLARE temp varchar(20);
/*将赋值查询返回的所有数据库名赋值给游标*/
DECLARE cur_record CURSOR FOR SELECT `SCHEMA_NAME` FROM `information_schema`.`SCHEMATA`;
/*表示没有数据返回时将这个值设置为1*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1;
OPEN cur_record; /*接着使用OPEN打开游标*/
FETCH cur_record INTO temp; /*将游标一次next的数据赋值给temp,即一行数据,如果有多列,可以用,分割赋值给多个变量*/
WHILE no_more_record != 1 DO
SET schemaName = concat(temp,',',schemaName);#拼接数据库名
/*查询数据库下面的所有表*/
select table_schema,table_name from information_schema.tables where table_schema=temp;
FETCH cur_record INTO temp;
END WHILE;
CLOSE cur_record; /*用完后记得用CLOSE把资源释放掉*/
select schemaName; /*查看所有的数据库名*/
END $
CALL listAllDB();