我们有一大段复杂的 SQL 代码,在 HeidiSQL 和 MySQL WB 中运行时不断崩溃。如果我们使用较少数量的记录运行相同的代码,则它可以正常运行。 我们认为,如果我们在 SP 中创建一个循环,其中代码被有效地分成 10 到 20 次运行,那么它可能会成功完成。我认为这可能涉及创建 10 到 20 个表,稍后将这些表联合为一个表。
尝试在较小的数据集上运行,运行良好。尝试增加服务器 RAM 和磁盘空间。尝试以多种不同的方式调整代码。
我意识到这可能不是理想的解决方案,但已被要求这样做。如果有人能帮助我编写代码,我将不胜感激。
下面是我构建的代码,但不起作用......
DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_while_loop$$
CREATE PROCEDURE test_mysql_while_loop()
BEGIN
DECLARE x INT;
SET x = 100;
WHILE x <= 2000 DO
DROP TABLE if EXISTS tablex; /* want to end up with table100-table2000 */
CREATE TABLE tablex AS (
SELECT t1.*
FROM bigtables t1
WHERE urn BETWEEN x AND x+101); /* select records where the URN is between 100 and 201 in 1st instance , 200 and 301 in second etc*/
SET x=x+100;
END WHILE;
END$$
DELIMITER ;
CALL test_mysql_while_loop();
20 table
最佳答案
这是如何准备和执行语句的简化示例
DROP PROCEDURE IF EXISTS p;
delimiter $$
CREATE PROCEDURE p()
BEGIN
DECLARE x INT;
SET x = 100;
WHILE x <= 300 DO
set @sql= (select concat('DROP TABLE if EXISTS table',x));
select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
set @sql = (select concat('CREATE TABLE table',x,' AS
SELECT t1.*
FROM users t1;'));
select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
SET x=x+100;
END WHILE;
END$$
DELIMITER ;
CALL p();
关于mysql - 使用存储过程中的循环增量创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152723/