有没有办法关闭存储过程的结果集?

时间:2013-07-08 06:45:46

标签: mysql

请考虑下面的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

我填充变量'sq'的代码行是我的问题的来源。此存储过程代码正在写入“DO STUFF”而不是返回结果。我需要填充变量,但是在结果集中返回@sq是不受欢迎的。

我正在使用Navicat进行编码,我得到了每次循环迭代返回的结果集。

有没有办法关闭存储过程的结果集?是否还有一种方法可以将它们转回中间过程?这对于调试目的很有用。谢谢。

1 个答案:

答案 0 :(得分:3)

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

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子句可以命名一个或多个变量的列表,这些变量可以是用户定义的变量,存储过程或函数参数,也可以是存储的程序局部变量。

详细了解here

P.S。:请注意,我在查询中添加了LIMIT 1。否则,将抛出查询返回多行的错误。

的区别
select @sq := sq from a_nice_table where id = @a_nice_var;

是,@sq := sq是为每一行(如果有多个)完成的,但最后变量将保存最后一行的值,而不是所有行的值。所以实际上没有区别,结果集......