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

时间:2016-12-28 09:47:10

标签: mysql stored-procedures mariadb


各位大家好。

在我的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);

是否有一种有效的方法可以使原始查询获得相同的结果?

请帮帮我。谢谢。

3 个答案:

答案 0 :(得分:2)

如果没有更多的上下文,它不清楚你究竟在问什么,但如果你需要暂时覆盖退出处理程序,请将查询嵌套在新的作用域中,并使用处理程序清除变量。 (如果在循环内部,则必须清除它们,否则如果已分配,它们仍将包含其先前值。)

-- 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 :(得分: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)

答案 2 :(得分:0)

选择a,b INTO aa,bb ...

参考:请参阅https://dev.mysql.com/doc/refman/5.7/en/select.html

中的INTO