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,沖洗所有中間提取的數據,我將需要以某種方式壓制。

它可能不是如我所料,但現在的問題已經消失。