1

我有一个SP,如避免从SP执行MySQL多重结果并执行


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(限制的参数),我恐怕它会占用所有的我的记忆(并且都是徒劳的)。 此外,我注意到,如果我从空字符串准备,它仍然有多个结果... 至少如何摆脱他们在执行语句? 我想有一个配方,以避免SP的任何输出,任何可能的语句 (我也有很多“更新...”和“选择...进入”里面,如果他们可以产生多的)。 Tnx任何帮助......

回答

0

好吧。我只是说它已经出来,并没有真正的问题。我没有仔细研究,但看起来服务器没有真正尝试执行语句(“call Proc();”)来查看是否有任何结果返回 - 它只是查看代码并假定会有多个结果集,需要连接才能处理它们。但是在我当时使用的PhpMyAdmin中,事实并非如此。然而,从MySQL命令行客户端发出相同的命令的确有诀窍 - 不会抱怨给定的连接上下文,也不会因为它们不必在那里而引起重复 - 这只是MySQL的估计。我不必从错误中得出结论,像这样的SP肯定会在MySQL中返回multis,冲洗所有中间提取的数据,我将需要以某种方式压制。

它可能不是如我所料,但现在的问题已经消失。