mysql - mariadb 已报告“end if”错误
问题描述
我有一条SQL语句一直报1064错误,请大家帮忙!
UPDATE `MessageQueue`
SET `Status`= 0, `RetryCount`= `RetryCount`+ '1', `LastRetryTime` = NOW(), `CanBeRemoved`=1
WHERE `MsgHash`= 1 AND `Status`=0;
SET @retVal = ROW_COUNT();
IF (@retVal = 0) THEN
UPDATE `MessageQueue` SET `Status`= 5 WHERE `MsgHash`= 1;
END IF;
SELECT @retVal;
这是在执行之后:(受影响的 1 行)执行时间:00:00:00:000 传输时间:00:00:00:016 总时间:00:00:00:016
(0 行受影响)执行时间:00:00:00:000 传输时间:00:00:00:015 总时间:00:00:00:015
错误:1064 您的 SQL 码语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 2 行的 '' 附近使用 ------- 如果删除“;” 在“更新MessageQueue
集Status
= 5 WHERE MsgHash
= 1;” 此错误将消失 -------- 执行时间:00:00:00:000 传输时间:00:00:00:000 总时间:00:00:00:000
错误:1064 您的 SQL 码语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行的“end if”附近使用的正确语法
执行时间:00:00:00:000 传输时间:00:00:00:000 总时间:00:00:00:000
(返回 1 行) 执行时间:00:00:00:000 传输时间:00:00:00:000 总时间:00:00:00:000
解决方案
几个问题:
- 您使用的是什么版本的 MariaDB?
- 您是从存储过程还是匿名块(BEGIN NOT ATOMIC)中调用句子?
我无法从匿名块中重现问题:
BEGIN NOT ATOMIC
UPDATE `MessageQueue`
SET `LastRetryTime` = NOW()
WHERE `Status` = 1;
SET @`retVal` := ROW_COUNT();
IF (@`retVal` = 0) THEN
UPDATE `MessageQueue`
SET `Status`= 5
WHERE `Status`= 0;
END IF;
END;
请参阅dbfiddle。
推荐阅读
- mysql - 将 oracle 的“之前连接”转换为 mariaDB
- android - 如何在颤动中调用另一个异步函数中的一个异步函数
- node.js - JWT 令牌过期如何工作?当令牌在节点js和角度7中过期时自动注销
- c++ - 字符串中的子字符串计数
- rust - 是否可以构建一个 &str 引用环境变量的 HashMap?
- sparql - SPARQL 查询:一组品种的猫以及属于的猫
- c# - 当代码中选定的属性更改时,Listview 不会更新
- vue.js - 无法构建堆叠的 Vue-ChartJS 线图
- python - 加速度计以高频采样,如何将 UTC 时间转换为浮点时间?
- c# - 如何使炮塔自动化以面对远处的目标?