mysql存储过程利用游标查询每个数据库的所有表

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();   

猜你喜欢

转载自blog.csdn.net/qwkxq/article/details/55002944