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

Is there a way to set multiple variables in one SELECT query in MySQL?


大家好

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

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

这个查询工作正常。

但是我为 SQLWARNING 添加了 exit 处理程序,当上面的 SELECT 查询没有结果时,它会发出 SQL WARNING就这样停下了。

No data - zero rows fetched, selected, or processed

我用谷歌搜索并找到了解决这个问题的方法。它正在像这样更改查询...

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);

有没有一种有效的方法可以得到与原始查询相同的结果?

请帮助我。谢谢。

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)

SELECT a, b 进入 aa, bb ...

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

中的INTO

在没有更多上下文的情况下,不清楚您到底在问什么,但是如果您需要临时覆盖退出处理程序,请将您的查询嵌套在一个新的范围块中,并使用一个处理程序来清除变量。 (如果在循环中,必须清除它们,否则如果分配,它们仍将包含其先前的值)。

-- 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