【问题标题】:How can I disable the result set returned from an EXECUTE STATEMENT on MYSQL Workbench如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集
【发布时间】: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 完全不同......有什么想法吗? 非常感谢! []的

【问题讨论】:

    标签: mysql sql stored-procedures mysql-workbench


    【解决方案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!你是对的,因为当我使用仅在一个命令中执行的多个表时,结果集仅在一个选项卡中返回。我没有禁用输出,但我的工作台工作正常。谢谢你的建议,我的朋友!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2014-02-24
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多