我正在尝试在游标中使用mysql workbench中的预准备语句。光标在一个非常大的数据集上工作,因此它被执行多次。每次为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(从tb_SplitDay中选择idSplitBill,其中idSplitBill =',idSplitBillVar,'和',@ columnNameEv,'= 1和softdelete = 0)');
idSplitBillVar =来自光标的id。 @columnNameEv =我正在填写的一个列。
我添加了这个信息是因为它被问到了,但是在我看来这并不重要,因为即使是最简单的查询,问题仍然存在。执行预准备语句时,您将获得输出结果。我只是想禁用这种行为。
答案 0 :(得分:6)
您使用的查询创建新的结果集,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