有没有一种简单的方法可以在程序中重命名 table?
Is there a easy way to rename a table in procedure?
我正在使用 MariaDB 10.1 SQLyog 11.5
我使用以下查询重命名了 table。
ALTER TABLE old_name RENAME new_name
但是有很多存储过程引用了'old_name'。我打开了所有 SP 创建查询并进行了更改。因为我不知道哪个SP有引用old_name table.
的查询
有没有办法知道哪个 SP 有引用 old_name table 的查询?
通过这个INFORMATION_SCHEMA.ROUTINES
你可以获取存储过程中可用的文本
请尝试此查询:(未验证)
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%old_name%'
-- AND ROUTINE_TYPE = "PROCEDURE" -- Filter only if need SPs
ORDER BY ROUTINE_NAME;
引用自此page
你可以这样做:
创建重命名查询
SELECT CONCAT ('RENAME TABLE ',
GROUP_CONCAT(t.TABLE_SCHEMA,'.',t.TABLE_NAME,' TO ', t.TABLE_SCHEMA,'.',REPLACE(t.TABLE_NAME,'old','NEW') SEPARATOR ' , ')
) INTO @sql
FROM information_schema.TABLES t
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_SCHEMA IN ('SCHEMA1','SCHEMA2')
AND t.TABLE_NAME LIKE 'old_table%';
仅用于验证
SELECT @sql;
准备并执行
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我正在使用 MariaDB 10.1 SQLyog 11.5
我使用以下查询重命名了 table。
ALTER TABLE old_name RENAME new_name
但是有很多存储过程引用了'old_name'。我打开了所有 SP 创建查询并进行了更改。因为我不知道哪个SP有引用old_name table.
的查询有没有办法知道哪个 SP 有引用 old_name table 的查询?
通过这个INFORMATION_SCHEMA.ROUTINES
你可以获取存储过程中可用的文本
请尝试此查询:(未验证)
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%old_name%'
-- AND ROUTINE_TYPE = "PROCEDURE" -- Filter only if need SPs
ORDER BY ROUTINE_NAME;
引用自此page
你可以这样做:
创建重命名查询
SELECT CONCAT ('RENAME TABLE ',
GROUP_CONCAT(t.TABLE_SCHEMA,'.',t.TABLE_NAME,' TO ', t.TABLE_SCHEMA,'.',REPLACE(t.TABLE_NAME,'old','NEW') SEPARATOR ' , ')
) INTO @sql
FROM information_schema.TABLES t
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_SCHEMA IN ('SCHEMA1','SCHEMA2')
AND t.TABLE_NAME LIKE 'old_table%';
仅用于验证
SELECT @sql;
准备并执行
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;