有没有办法关闭存储过程的结果集? 请考虑下面的MySQL存储过程代码,它工作得很好… BEGIN sponsor: loop -- DO STUFF select @sq := sq from a_nice_table where id = @a_nice_var; -- DO MORE STUFF end loop sponsor; END

有没有办法关闭存储过程的结果集? 请考虑下面的MySQL存储过程代码,它工作得很好… BEGIN sponsor: loop -- DO STUFF select @sq := sq from a_nice_table where id = @a_nice_var; -- DO MORE STUFF end loop sponsor; END,mysql,Mysql,填充变量'sq'的代码行是我问题的来源。这个存储过程代码被编写为“执行任务”,而不是返回结果。我需要填充变量,但在结果集中返回@sq是不需要的 我正在使用Navicat进行编码,每次循环迭代都会返回一个结果集 有没有办法关闭存储过程的结果集?有没有办法让他们回到中间阶段?这对于调试目的很有用。谢谢。这种填充方式不会输出结果 select sq into @sq from a_nice_table where id = @a_nice_var limit 1; 它也适用于多个变量 select

填充变量'sq'的代码行是我问题的来源。这个存储过程代码被编写为“执行任务”,而不是返回结果。我需要填充变量,但在结果集中返回@sq是不需要的

我正在使用Navicat进行编码,每次循环迭代都会返回一个结果集


有没有办法关闭存储过程的结果集?有没有办法让他们回到中间阶段?这对于调试目的很有用。谢谢。

这种填充方式不会输出结果

select sq into @sq from a_nice_table where id = @a_nice_var limit 1;
它也适用于多个变量

select sq, whatever, one_more into @sq, @v_whatever, @v_one_more from a_nice_table where id = @a_nice_var limit 1;
INTO子句可以命名一个或多个变量的列表,这些变量可以是用户定义的变量、存储过程或函数参数,也可以是存储程序局部变量

阅读更多关于它的信息

注意,我在查询中添加了
限制1
。否则,查询返回多行时将抛出错误。区别在于

select @sq := sq from a_nice_table where id = @a_nice_var;

也就是说,
@sq:=sq
对每一行都执行(如果有多行),但最终变量将保存最后一行的值,而不是所有行的值。所以实际上没有区别,结果集…

回答得很好!代码有效,答案写得很好,还有一个链接可以帮助我进一步帮助自己。完美,谢谢。