"DMS在任务编排里能否做到 删除某个库的所有表?
准备整个 存储过程
DELIMITER //
CREATE PROCEDURE drop_all_tables()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tableName VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'xxxx';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET FOREIGN_KEY_CHECKS = 0;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN
LEAVE read_loop;
END IF;
SET @dropStmt = CONCAT('DROP TABLE IF EXISTS `', tableName, '`;');
PREPARE stmt FROM @dropStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
-- 在删除表之后,将外键检查设置为 1,重新启用外键约束检查
SET FOREIGN_KEY_CHECKS = 1;
END;
//
-- 设置分隔符为默认值
DELIMITER ;
任务执行失败:
DMS不支持当前语句的执行,请更换语句或使用其他工具代替,语句类型...UNKNOW
但是 我用 SQL console 是能执行的。"
【 DMS在任务编排里能否做到 删除某个库的所有表?
】
以下是一个示例的存储过程,用于删除指定数据库中的所有表:
sql
Copy
DELIMITER //
CREATE PROCEDURE drop_all_tables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'your_database_name'; -- 替换为你要删除表的数据库名称
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN
LEAVE read_loop;
END IF;
SET @dropStmt = CONCAT('DROP TABLE IF EXISTS ', tableName);
PREPARE dropStmt FROM @dropStmt;
EXECUTE dropStmt;
DEALLOCATE PREPARE dropStmt;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
在上述示例中,使用了information_schema表来获取指定数据库中的所有表名,并使用循环和动态SQL语句来逐个删除表。
你可以将上述存储过程添加到DMS任务编排中,并在需要删除某个数据库中的所有表时调用该存储过程。请确保在执行删除操作之前,先进行必要的数据备份,并谨慎操作。
"是要前面加一个 delimiter //,end;改成end;// 然后再加一行 delimiter ; 类似这样的。
此回答整理至钉群“阿里云DMS数据管理用户交流群”。"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。