使用Execute避免来自SP的MySQL多重结果

时间:2010-06-12 05:57:55

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

我有一个类似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//

它给出了多结果。除了它不方便,如果我得到所有这些多结果(我真的根本不需要),大约5(限制的参数)为Soul中的成千上万的记录中的每一个,我担心它将需要所有我的记忆(一切都是徒劳的)。 此外,我注意到,如果我从空字符串做准备,它仍然有多个结果... 至少如何在执行语句中摆脱它们? 对于任何可能的陈述,我想有一个避免SP输出的配方 (我也有很多“更新...”和“选择......进入”内部,如果他们可以产生多个)。 Tnx任何帮助...

1 个答案:

答案 0 :(得分:0)

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

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