1

请考虑下面的 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 进行编码,并且每次循环迭代都会返回一个结果集。

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

4

1 回答 1

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

在此处阅读更多相关信息。

PS:请注意,我添加LIMIT 1到查询中。否则将引发查询返回多于一行的错误。区别于

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

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

于 2013-07-08T10:06:27.513 回答