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 コマンド ライン クライアントから同じコマンドを発行すると、問題は解決しました。指定された接続コンテキストについて文句を言うことはありません。また、そこに存在する必要がないため、マルチもありません。これは単なる MySQL の推定です。このエラーから、このような SP は確実に MySQL でマルチを返すと結論付ける必要はありませんでした。

思ったほどではないかもしれませんが、問題はなくなりました。

于 2010-11-27T21:04:37.593 に答える