1

我有一个像这样的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 寻求帮助...

4

1 回答 1

0

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

它可能不像我想象的那样,但现在问题已经消失了。

于 2010-11-27T21:04:37.593 回答