【发布时间】:2014-06-19 00:49:10
【问题描述】:
在 MySQL 中创建更复杂的存储过程时,我的 CASE 语句遇到了一个奇怪的问题。我已经简化了我的程序来显示这个问题。我在每个循环中选择了三件事来澄清问题:count 变量、CASE 之前的modTemp 变量,然后是一个代表采用了哪个 CASE 路径的数字。
DELIMITER //
CREATE PROCEDURE `AddPlants` (IN plantNum int)
BEGIN
DECLARE count int;
DECLARE modTemp int;
SET count = 1;
WHILE count <= plantNum DO
SELECT CONCAT('count = ', count);
SET modTemp = count % 3;
SELECT CONCAT('modTemp = ', modTemp);
CASE modTemp
WHEN modTemp = 1 THEN
SELECT 1;
WHEN modTemp = 2 THEN
SELECT 2;
WHEN modTemp = 0 THEN
SELECT 3;
ELSE
SELECT CONCAT('Error: modTemp = ', modTemp);
END CASE;
SET count = count + 1;
END WHILE;
END//
现在我使用CALL AddPlants(3);这是我的结果:
预期输出
count = 1, modTemp = 1, 1
count = 2, modTemp = 2, 2
count = 3, modTemp = 0, 3
实际输出
count = 1, modTemp = 1, 1
count = 2,modTemp = 2,错误:modTemp = 2
count = 3, modTemp = 0, 1
每次,count 和 modTemp 都是正确的值。但是,在第二个循环中,modTemp 为 2 但不进入 CASE 2。在第三个循环中,modTemp 为 0 但进入 CASE 1。知道这里发生了什么吗?
【问题讨论】:
标签: mysql stored-procedures case modulo