如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集
Posted
技术标签:
【中文标题】如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集【英文标题】:How can I disable the result set returned from an EXECUTE STATEMENT on MYSQL Workbench 【发布时间】:2020-11-14 20:40:48 【问题描述】:我正在使用 mysql 5.6 版本的 InnoDB,并且我创建了一个存储过程来对我的架构中的所有对象运行 ANALYZE TABLE。 所以我使用 CURSOR 和每一个 FETCH 执行一个循环,我运行一个 PREPARE STATEMENT EXECUTE,如下所示:
...
OPEN CURSOR_TABLE_LIST;
LOOP_TABLE_LIST: LOOP
FETCH CURSOR_TABLE_LIST INTO vTableName;
SET @full_stmt = CONCAT('ANALYZE TABLE mySchema.', vTableName);
PREPARE stmt FROM @full_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF vExitLoop THEN
CLOSE CURSOR_TABLE_LIST;
LEAVE LOOP_TABLE_LIST;
END IF;
END LOOP LOOP_TABLE_LIST;
...
问题是:执行 ANALYZE 进程的每个准备语句都会返回一个包含 4 列的结果集,而我正在使用 MySQL Workbench。因此,如果我的架构中存在太多表,我的 Workbench 将冻结并停止运行。
如何静默、禁用、省略或抑制 EXECUTE STATEMENT 返回? 我知道对于简单的 SELECT 语句,我可以使用它:
SET @foo = (SELECT COL FROM TAB);
但是我可以对 PREPARE STATEMENT 结构做类似的事情吗? 我尝试过的另一种可能的解决方案是在另一个“通用过程”中编写准备语句块的编程,但我也没有找到一种方法来使 CALL PROCEDURE 的返回静默......
CALL SP_EXECUTE_IMMEDIATE('ANALYZE TABLE mySchema.myTable');
我是使用 MySQL 的新手...也许我可以将返回值放在一个表中? 它与 PLSQL 或 T-SQL 完全不同......有什么想法吗? 非常感谢! []的
【问题讨论】:
【参考方案1】:分析表可选地允许您分析多个表
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
TABLE tbl_name [, tbl_name]
https://dev.mysql.com/doc/refman/5.6/en/analyze-table.html
也许这比你刚才的一次一次的方法更合适。
【讨论】:
感谢 P.Salmon!你是对的,因为当我使用仅在一个命令中执行的多个表时,结果集仅在一个选项卡中返回。我没有禁用输出,但我的工作台工作正常。谢谢你的建议,我的朋友!!以上是关于如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MySql Workbench 中禁用 INVISIBLE 索引选项?