具有动态 SQL 的存储过程,可创建大量结果选项卡
Have Stored Proc with Dynamic SQL that creates loads of results tabs
我用动态查询代码构建了一个 SP。麻烦的是,每次它做某事时,它都会将一些东西发送到新的结果选项卡。下面是代码的简化版本。
CREATE PROCEDURE p()
BEGIN
DECLARE x,z INT;
SET x = 0;
SET z = 0;
while z <= 9 DO
INSERT INTO loop_log (time, note) VALUES (NOW(), z);
/* Code block 1 - drop tables prior to creation*/
set @sql= (select concat('DROP TABLE if EXISTS table',z));
select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
/* Code block 2 - create mini visit tables */
/* Loads of other code blocks */
SET z=z+1;
END WHILE;
END$$
DELIMITER ;
CALL p();
我真的不想要代码中的任何结果选项卡。
一个存储过程可以生成多个结果集,如果您使用 GUI 客户端,这些结果集将显示在单独的选项卡中。每次执行 SELECT 语句时都会发送一个结果集,而不会将其存储在带有
的变量中
SET @var = (SELECT ...)
或
SELECT .. INTO @var ...
在你的程序中行
select @sql;
将在每次循环迭代中执行,并将结果集发送到客户端。这可能有利于调试 - 但如果您只想执行 @sql
语句而不显示它 - 只需删除该行。
我用动态查询代码构建了一个 SP。麻烦的是,每次它做某事时,它都会将一些东西发送到新的结果选项卡。下面是代码的简化版本。
CREATE PROCEDURE p()
BEGIN
DECLARE x,z INT;
SET x = 0;
SET z = 0;
while z <= 9 DO
INSERT INTO loop_log (time, note) VALUES (NOW(), z);
/* Code block 1 - drop tables prior to creation*/
set @sql= (select concat('DROP TABLE if EXISTS table',z));
select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
/* Code block 2 - create mini visit tables */
/* Loads of other code blocks */
SET z=z+1;
END WHILE;
END$$
DELIMITER ;
CALL p();
我真的不想要代码中的任何结果选项卡。
一个存储过程可以生成多个结果集,如果您使用 GUI 客户端,这些结果集将显示在单独的选项卡中。每次执行 SELECT 语句时都会发送一个结果集,而不会将其存储在带有
的变量中SET @var = (SELECT ...)
或
SELECT .. INTO @var ...
在你的程序中行
select @sql;
将在每次循环迭代中执行,并将结果集发送到客户端。这可能有利于调试 - 但如果您只想执行 @sql
语句而不显示它 - 只需删除该行。