MYSQL中的Case语句,没有找到Case?
Posted
技术标签:
【中文标题】MYSQL中的Case语句,没有找到Case?【英文标题】:Case statement in MYSQL, Case not found for? 【发布时间】:2013-04-13 17:52:41 【问题描述】:我有一个 CASE
语句,它接收表的前 40 条记录,它具有基于计数器的不同过程 - @COUNT
。
不幸的是,当我在没有else
的情况下运行该程序时,它不起作用并给出Case not found for CASE statement (Error 1339)
。
但是当我确实有 else 时,它工作正常,但它在最后一天运行了两次,所以我有最后一个日期的副本。
有什么理由吗?请检查我下面的代码..很多已被删除
CREATE PROCEDURE `init`(In dID INT)
BEGIN
DECLARE first40 CURSOR FOR
SELECT * FROM tbl
WHERE tbl.id = dID
ORDER BY tbl.datum ASC
LIMIT 40;
OPEN first40;
SET @COUNT = 0;
REPEAT FETCH first40 INTO Tid, Tdt, Tcls, Thgh, Tlw, Tvol, Tnms_id;
SET @COUNT = @COUNT + 1;
CASE
WHEN @COUNT = 1 THEN
WHEN @COUNT>= 2 AND @COUNT < 9 THEN
WHEN @COUNT = 9 THEN
WHEN @COUNT >= 10 AND @COUNT < 12 THEN
WHEN @COUNT = 12 THEN
WHEN @COUNT = 13 THEN
WHEN @COUNT = 14 THEN
WHEN @COUNT = 15 THEN
WHEN @COUNT = 16 THEN
WHEN @COUNT >= 17 AND @COUNT < 20 THEN
WHEN @COUNT >= 20 AND @COUNT < 26 THEN
WHEN @COUNT = 26 THEN
WHEN @COUNT >= 27 AND @COUNT < 34 THEN
WHEN @COUNT = 34 THEN
WHEN @COUNT > 34 AND @COUNT <= 40 THEN
END CASE;
INSERT INTO .....
VALUES ....;
UNTIL done END REPEAT;
CLOSE first40;
END
【问题讨论】:
如果你把else去掉,把limit改成limit 39
,还会报错吗?
【参考方案1】:
您应该能够轻松地将ELSE
添加回 CASE(与 SELECT 查询不同,ELSE 在存储过程 CASE 块中是必需),然后在 INSERT INTO 之前跟进:
IF @COUNT <= 40
INSERT INTO .....
VALUES ....;
重复第40行的原因是第41次通过REPEAT FETCH
,没有得到任何数据所以
-
变量未更新(但也未清除)
直到
UNTIL done
部分之前的代码块之后才会检查条件。
【讨论】:
如果我将查询限制为40 returned records
,为什么它会执行41st pass
?
您是否完整阅读了我的回答?计算机需要知道何时停止,但在循环底部检查条件。
好的,只有在插入 40 条记录后才将 done 设置为 1,因为它在插入后检查,它在第 41 次插入时进行检查。谢谢兄弟以上是关于MYSQL中的Case语句,没有找到Case?的主要内容,如果未能解决你的问题,请参考以下文章