6

mysql ワークベンチのプリペアド ステートメントをカーソルで使用しようとしています。カーソルは非常に大きなデータ セットに対して機能するため、何度も実行されます。EXECUTE ステップの新しい結果が表示されるたびに。これにより、開いている結果ウィンドウが多すぎるため、最終的に mysql ワークベンチがクラッシュします。

カーソルでは、次のようなことを行います。

PREPARE stmt2 FROM @eveningQuery;
EXECUTE stmt2; 
DEALLOCATE PREPARE stmt2;

通常、私は次のようなものを使用します

set aVar = (EXECUTE stmt2); 

クエリを沈黙させますが、EXECUTEはそのようには機能しません。

mysql で EXECUTE コマンドの出力を無効にする方法を知っている人はいますか?

注:変数のデータを取得する方法は理解していますが、防止したいのは、このように結果の概要に表示されることですここに画像の説明を入力

これにより、ループが多すぎると mysql-workbench がクラッシュします。

@eveningQuery の例を聞かれたので編集。

SET @eveningQuery = CONCAT('select @resultNm := exists (idSplitBill =', idSplitBillVar, ' and ', @columnNameEv ,' = 1 and softdelete = 0)');

idSplitBillVar = カーソルからの ID。@columnNameEv = 可変的に入力している列。

質問されたのでこの情報を追加しましたが、最も単純なクエリでも質問が残っているため、私の意見では問題ではありません。準備されたステートメントを実行すると、出力結果が得られます。この動作を無効にしたいだけです。

4

1 に答える 1

7

使用するクエリは新しい結果セットを作成し、GUIクライアントはそれを表示します(...何度も)-

SELECT @resultNm:=EXISTS(
  SELECT idSplitBill FROM tb_SplitDay
  WHERE idSplitBill =', idSplitBillVar, ' AND ', @columnNameEv ,' = 1 AND softdelete = 0
)

このクエリを書き直すことができ、結果セットは作成されません-

SELECT EXISTS(
  SELECT idSplitBill FROM tb_SplitDay
  WHERE idSplitBill =', idSplitBillVar, ' AND ', @columnNameEv ,' = 1 AND softdelete = 0
)
INTO @resultNm
于 2013-03-12T08:13:13.607 に答える