2016-12-28 85 views
1


有没有办法在MySQL中的一个SELECT查询中设置多个变量?

大家好。

在我的SP中,有一个像这样的SELECT查询。

SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01; 

此查询正常工作。

但我已经为SQLWARNING添加了退出处理程序,当上面的SELECT查询没有结果时,它会使SQL WARNING如此并停止。

无数据 - 零行获取,选择,或加工

我GOOGLE和找到一种方法来解决这个问题。它正在改变这样的查询...

SELECT var_01 = val_01, var_02 = val_02 FROM table_name WHERE col_name = condition_01; 

此查询的工作原理。但是原始查询和修改后的查询之间存在差异。

在SP中,原始的不会抛出SELECT查询的结果。它只是将SELECT查询的值放入变量中。

但后者会将其SELECT结果与变量的值一起抛出。

所以我调用SP的cpp代码得到错误的值。

我可以改变查询..

SET var_01 = SELECT val_01 FROM table_name WHERE col_name = condition_01; 

SET var_02 = SELECT val_02 FROM table_name WHERE col_name = condition_01; 

但你也知道,这是非常低效和下面的查询不起作用。

SET var_01, var_02 = (SELECT val_01, val_02 FROM table_name WHERE col_name = condition_01); 

有没有一种有效的方法来使原始查询的结果相同?

请帮帮我。谢谢。

+0

然后在您的退出处理程序中解决此特定情况(例如,如果第一个查询不返回任何记录,则不要退出)。 – Shadow

回答

1

如果没有更多的情况下,目前还不清楚,你问正是,但如果你需要暂时重写退出处理程序,将您的查询嵌套到新的作用域中,并使用处理程序清除变量。 (如果在一个循环内部,它们必须被清除,否则如果被赋值,它们仍然包含它们的先前值)。

-- inside existing procedure 
BEGIN -- add this and the handler 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_01 = NULL, var_02 = NULL; 
    SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01; 
END; -- add this 
-- procedure continues here 
+1

“临时覆盖退出处理程序”对我来说非常新鲜且有用。谢谢!! – passion053

0
SET @var_01 = @var_02 = ''; 
SELECT _val_01, _val_02 INTO @var_01, @var_02 FROM table_name WHERE col_name = condition_01; 

// check whether var_01=='' or length==0 then do what you want 
SELECT @var_01, @var_02 
// or 
SELECT LENGTH(@var_01) 
+1

你正在使用的用户变量不是本地变量 –

+0

@ Milor8,你的解决方案的重点是验证检查不是语法。好的,谢谢你的建议。 – passion053

0

选择A,B INTO AA,BB ...

参考:见INTOhttps://dev.mysql.com/doc/refman/5.7/en/select.html

+0

我的查询使用“SELECT value_01,value_02 INTO var_01,var_02 ...”查询。正如我所提到的,它运行良好,但是如果SELECT没有结果集,它会产生SQLWARNING。 – passion053

+0

'col_name = condition_01'满足了吗? –

+0

当然。如果没有结果,“SELECT ... INTO”仍会发出警告。 – passion053

相关问题