Created
January 23, 2025 15:52
-
-
Save andreoss/e6df6ac642b8291f3f1095a2379a2390 to your computer and use it in GitHub Desktop.
MySQL. Rename the database, i.e. create a new database and move all tables and views to it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DELIMITER $ | |
DROP PROCEDURE IF EXISTS sys.rename_database; | |
CREATE PROCEDURE sys.rename_database(IN old_schema VARCHAR(255), IN new_schema VARCHAR(255)) | |
BEGIN DECLARE done INT DEFAULT FALSE; | |
DECLARE t VARCHAR(255); | |
DECLARE v VARCHAR(255); | |
DECLARE d TEXT; | |
DECLARE table_cursor CURSOR FOR | |
SELECT TABLE_NAME AS t FROM information_schema.TABLES WHERE TABLE_SCHEMA = old_schema AND TABLE_TYPE = 'BASE TABLE'; | |
DECLARE view_cursor CURSOR FOR | |
SELECT TABLE_NAME, VIEW_DEFINITION FROM information_schema.VIEWS WHERE TABLE_SCHEMA = old_schema; | |
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; | |
OPEN table_cursor; | |
read_loop: LOOP FETCH table_cursor INTO t; | |
IF done THEN LEAVE read_loop; END IF; | |
SET @code = CONCAT('RENAME TABLE `', old_schema, '`.`', t, '` TO `', new_schema, '`.`', t, '`;'); | |
PREPARE stmt FROM @code; | |
EXECUTE stmt; | |
DEALLOCATE PREPARE stmt; | |
END LOOP; | |
CLOSE table_cursor; | |
SET done = FALSE; | |
OPEN view_cursor; | |
read_view_loop: LOOP FETCH view_cursor INTO v, d; | |
IF done THEN LEAVE read_view_loop; END IF; | |
SET @code = CONCAT('CREATE VIEW `', new_schema, '`.`', v, '` AS ', REPLACE(d, old_schema, new_schema), ';'); | |
PREPARE stmt FROM @code; | |
EXECUTE stmt; | |
DEALLOCATE PREPARE stmt; | |
END LOOP; | |
CLOSE view_cursor; | |
END$ | |
DELIMITER ; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment