设置变量结果,来自查询
Posted
技术标签:
【中文标题】设置变量结果,来自查询【英文标题】:Set the variable result, from query 【发布时间】:2012-06-28 21:03:31 【问题描述】:当我创建保存的过程时,我可以创建一些变量是吗?例如:
CREATE PROCEDURE `some_proc` ()
BEGIN
DECLARE some_var INT;
SET some_var = 3;
....
问题:但是如何从查询中设置变量结果,即如何制作一些这样的:
DECLARE some_var INT;
SET some_var = SELECT COUNT(*) FROM mytable ;
?
【问题讨论】:
看这里,您的问题可能重复。 ***.com/questions/3888735/… 不,不是真正的重复。 ***.com/questions/3888735/… 的主题是“用户自定义变量”。这个问题是关于存储过程局部变量的。我的答案中的语法也适用于用户定义的变量,但反之则不行。 【参考方案1】:有多种方法可以做到这一点。
您可以使用子查询:
SET @some_var = (SELECT COUNT(*) FROM mytable);
(就像你原来的一样,只需在查询周围添加括号)
或使用 SELECT INTO 语法来分配多个值:
SELECT COUNT(*), MAX(col)
INTO @some_var, @some_other_var
FROM tab;
子查询语法稍微快一些(我不知道为什么),但只能分配一个值。 select into 语法允许您一次设置多个值,因此如果您需要从查询中获取多个值,您应该这样做,而不是为每个变量一次又一次地执行查询。
最后,如果您的查询返回的不是单行而是一个结果集,您可以使用cursor。
【讨论】:
Roland Bouman,非常感谢,您的第二个变体正在工作,但首先不行,括号无济于事。 :) 没有。两者都有效。您一定犯了语法错误。 mysql> delimiter // mysql> 创建函数 f() -> 返回 int -> 开始 -> 声明 v int; -> set v = (select count(*) from dual); -> 返回 v; -> 结束; -> // 查询成功,0 行受影响(0.05 秒) mysql> select f(); -> // +------+ | f() | +--------+ | 1 | +-----+ 1 行 in set (0.00 sec) mysql> select version(); -> // +------------+ |版本() | +-----------+ | 5.5.20 | +-----------+ 1 行(0.00 秒) 我不知道哪里有语法错误,我没有使用“delimiter //”,这可能是我的错误,但变体“INTO”帮助了我,非常感谢。 :) @ოთოშავაძე 在 MySQL 控制台执行以下命令:set @cnt=(select count(*) from your_table); select @cnt;
他们应该可以工作。【参考方案2】:
以下 select 语句应该允许您保存 count(*) 的结果。
SELECT COUNT(*) FROM mytable INTO some_var;
【讨论】:
MySQL 允许您将 INTO 子句设置为语句末尾的最后一个子句。但是,在标准 SQL 中,它出现在 SELECT 和 FROM 子句之间。 第 5 行的错误 1327 (42000):未声明的变量:some_var。 - 我收到这个错误。如何解决这个问题。 @GauravGupta:DECLARE some_var INT;
以上是关于设置变量结果,来自查询的主要内容,如果未能解决你的问题,请参考以下文章