如何禁用从 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 索引选项?

MySQL Workbench 自动增量禁用

如何避免 MySQL Workbench 错误代码:此更新期间出现 1175 *无需*禁用“安全更新”

MySQL Workbench 深色主题

从 mysql Workbench 6.0 导出数据

MySQL 错误代码:更新期间的 1175(MySQL-Workbench 与控制台)