mysql stored procedure --- database replication

DELIMITER $$

USE `bjcmdb`$$

DROP PROCEDURE IF EXISTS `pro_database_backup`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_database_backup`(IN databaseName CHAR(40))
BEGIN 
     ##Define variables 
     DECLARE tableName VARCHAR(40 );
     DECLARE oldtableName VARCHAR(40);
     DECLARE newtableName VARCHAR(40);
     DECLARE cur_stop INT DEFAULT 0;
     ##First define the cursor here
     DECLARE cur_tableName CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'bjcmdb' AND TABLE_NAME NOT IN ('c_basisline'); 
     ##This is a conditional processing, for the condition of SQLSTATE '02000'
     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cur_stop = NULL;
    
     ##Create database
     SET @createDatabaseSql :=CONCAT("create database ",databaseName,";"); 
    
     PREPARE STMT FROM @createDatabaseSql;
     EXECUTE STMT; 
    
    
     ##Format database name
     SET databaseName=CONCAT(databaseName,".");
     ##Open the cursor
     OPEN cur_tableName;
/*The cursor goes down one step and pays the queried value to the defined variable*/
FETCH cur_tableName INTO tableName;
##End traversal
        WHILE until the query result is empty ( cur_stop IS NOT NULL) DO
     ##Assign table name
     SET oldtableName=CONCAT('bjcmdb.',tableName);
     SET newtableName=CONCAT(databaseName,tableName);
     ##Create table, including table structure and index
             SET @createsql :=CONCAT("CREATE TABLE ", newtableName," LIKE ",  oldtableName,";"); 
    
     PREPARE STMT FROM @createsql;
     EXECUTE STMT;  
    
     ##复制数据到指定库的表
     SET @insertsql :=CONCAT("INSERT INTO ",newtableName," SELECT * FROM ",oldtableName,";"); 
     ##SELECT  @insertsql;    
     PREPARE STMT FROM @insertsql;    
     EXECUTE STMT;  

     FETCH cur_tableName INTO tableName;
END WHILE;
    CLOSE cur_tableName;
 
    END$$

DELIMITER ;

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327041090&siteId=291194637