Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL中的Case语句,未找到的Case?_Mysql_Sql_Database_Mysqli_Mysql Workbench - Fatal编程技术网

MYSQL中的Case语句,未找到的Case?

MYSQL中的Case语句,未找到的Case?,mysql,sql,database,mysqli,mysql-workbench,Mysql,Sql,Database,Mysqli,Mysql Workbench,我有一个CASE语句,它接受表的第一个40记录,它有不同的过程,基于计数器-@COUNT。 不幸的是,当我在没有else的情况下运行该过程时,它不起作用,并为Case语句提供了一个Case not found(错误1339) 但是当我有了其他的时候,它工作很好,但它运行了最后一天两次,所以我有一个重复的最后一个日期 有什么原因吗?请检查我下面的代码..很多都被删除了 CREATE PROCEDURE `init`(In dID INT) BEGIN DECLARE first40

我有一个
CASE
语句,它接受表的第一个40记录,它有不同的过程,基于计数器-
@COUNT
。 不幸的是,当我在没有
else
的情况下运行该过程时,它不起作用,并为Case语句提供了一个
Case not found(错误1339)

但是当我有了其他的时候,它工作很好,但它运行了最后一天两次,所以我有一个重复的最后一个日期

有什么原因吗?请检查我下面的代码..很多都被删除了

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
创建过程'init'(在dID INT中)
开始
声明的第一个40游标
从tbl中选择*
其中tbl.id=dID
由tbl.DATA ASC订购
上限40;
先开40;
设置@COUNT=0;
在Tid、Tdt、Tcls、Thgh、Tlw、Tvol、Tnms_id中重复FETCH first40;
设置@COUNT=@COUNT+1;
案例
当@COUNT=1时,则
当@COUNT>=2且@COUNT<9时,则
当@COUNT=9时,则
当@COUNT>=10且@COUNT<12时,则
当@COUNT=12时,则
当@COUNT=13时,则
当@COUNT=14时,则
当@COUNT=15时,则
当@COUNT=16时,则
当@COUNT>=17且@COUNT<20时,则
当@COUNT>=20且@COUNT<26时,则
当@COUNT=26时,则
当@COUNT>=27且@COUNT<34时,则
当@COUNT=34时,则

当@COUNT>34和@COUNT时,您应该能够轻松地将
ELSE
添加回案例中(与SELECT查询不同,在存储过程案例块中,ELSE是必需的),然后在插入之前继续执行此操作:

IF @COUNT <= 40
INSERT INTO .....
            VALUES ....;

IF@COUNT如果您不使用else并将限制更改为
limit 39
,您是否仍然会收到错误?如果我将查询限制为
40条返回记录,为什么它会执行
41次通过
?您完整阅读了我的答案吗?计算机需要知道何时停止,但在循环的底部检查条件。好的,只有在插入40条记录后,so done才会设置为1,因为插入后会检查,所以它会在第41次循环中插入。谢谢兄弟