【问题标题】:Avoid MySQL multi-results from SP with Execute使用 Execute 避免来自 SP 的 MySQL 多结果
【发布时间】:2010-06-12 05:57:54
【问题描述】:

我有一个像这样的SP


BEGIN
DECLARE ...
CREATE TEMPORARY TABLE tmptbl_found (...);
PREPARE find FROM
"
      INSERT INTO tmptbl_found
       (SELECT userid FROM
            (
          SELECT userid FROM Soul
          WHERE
            .?.?.
          ORDER BY
            .?.?.
            ) AS left_tbl
          LEFT JOIN
            Contact
          ON userid = Contact.userid
        WHERE Contact.userid IS NULL LIMIT ?)
";

DECLARE iter CURSOR FOR SELECT userid, ... FROM Soul ...;
...
l:LOOP
    FETCH iter INTO u_id, ...;
    ...
    EXECUTE find USING ...,. . .,u_id,...;
    ...
  END LOOP;
...
END//

它会产生多重结果。除了不方便之外,如果我得到所有这些多结果(我真的根本不需要),对于 Soul 中数十万条记录中的每条记录大约 5 个(限制的参数),恐怕它会占用所有我的记忆(一切都是徒劳的)。 另外,我注意到,如果我从一个空字符串进行准备,它仍然有多个结果...... 至少如何在执行语句中摆脱它们? 对于任何可能的声明,我想有一个方法来避免 SP 的任何输出 (我也有很多“更新...”和“选择...进入”里面,如果他们可以产生多)。 Tnx 寻求帮助...

【问题讨论】:

    标签: mysql stored-procedures prepared-statement multiple-resultsets


    【解决方案1】:

    嗯。我只想说它已经出来了,没有真正的问题。我没有仔细调查,但看起来服务器实际上并没有尝试执行语句(“call Proc();”)来查看是否会有任何结果返回 - 它只是查看了代码并假设会有多个结果集,需要连接才能处理它们。但是在我当时使用的 PhpMyAdmin 中,它不是。然而,从 MySQL 命令行客户端发出相同的命令起到了作用——没有抱怨给定的连接上下文,也没有 multis,因为它们不必在那里——这只是 MySQL 的估计。我不必从错误中得出结论,像这样的 SP 肯定会在 MySQL 中返回 multis,刷新所有中间获取的数据,我需要以某种方式抑制。

    可能不是我想的那样,但问题已经解决了。

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2013-12-31
      • 2020-04-07
      • 2019-03-30
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多