【发布时间】:2013-08-10 10:36:15
【问题描述】:
问题: 我有一个 MySQL 存储过程,我想在每次调用该过程时将用户变量重置为 0,但该变量似乎会记住每次运行时的值,我无法将其初始化为零。
详细信息:我有一个数据表(称为data),我从中读取数据表,然后在另一个表(称为results)中生成一对一相关的记录。我在使用 Insert Select 语句的存储过程中执行此操作。我还使用了一个用户变量@mycount,它随每一行递增。这是我的代码的简化版本:
DELIMITER //
CREATE PROCEDURE doSomething
BEGIN
SET @mycount := 0;
INSERT INTO results (data_id, mycounter)
SELECT data.id, (@mycount := @mycount+1)
FROM data LEFT JOIN results ON data.id = results.data_id
WHERE ... GROUP BY ...
HAVING ...
ORDER BY ...;
END //
DELIMITER ;
分析:这几乎可以按预期工作,只是我需要在每次运行时将@mycount 重置为零,而上面的SET 语句没有实现这一点。调试时,我可以看到@mycount 的最后一个值总是从存储过程的上一次运行中记住的。我也尝试在插入后将其设置为零。
注意事项:
- 我正在使用
@变量来增加和跟踪行号。也许这里还有其他选择? - 问题似乎与Having 子句有关。当我运行一个类似但不同的查询但不带have子句时,变量重置没有问题。
问题:为什么不能在每次运行前将@mycount设置为零?如果它正在重置并且只是我的 Have 子句导致意外计数,是否有更好的方法来重写我的 SQL?
我希望有人遇到过类似的事情,因为这看起来很晦涩。
【问题讨论】:
-
@Jackcob 不,一点也不。
标签: mysql sql stored-procedures insert-select user-variables