我有一个简单的表,有两列:一个名为 id 的自动增量 int 列和一个名为 start 的日期列。我正在尝试编写一个存储过程,给定一个值,它将计算将其绑定(bind)到的适当记录。问题是我收到一个语法错误,它并没有真正告诉我发生了什么。错误是:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET finalResult = candidate;
这是我用来创建该过程的代码。谁能告诉我我做错了什么?
delimiter //
CREATE PROCEDURE FindGCLDate(IN targetDate DATE)
BEGIN
DECLARE candidate DATE;
DECLARE finalResult DATE;
DECLARE loopComplete BOOLEAN;
DECLARE allDates CURSOR FOR SELECT * FROM gcl_dates;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET loopComplete = TRUE;
OPEN allDates;
myLoop : LOOP
FETCH allDates INTO candidate;
SELECT candidate;
IF targetDate < candidate
SET finalResult = candidate; -- this is the offending line
SET loopComplete = TRUE;
END IF;
IF loopComplete THEN
CLOSE allDates;
LEAVE myLoop;
END IF;
END LOOP myLoop;
SELECT finalResult;
END //
我知道该过程还有更多错误——我还没有定义输出参数或返回任何内容。但我只是想知道为什么我会收到此错误。
谢谢!
最佳答案
上面一行缺少 THEN
:
IF targetDate < candidate
应该是
IF targetDate < candidate THEN
来自fine manual , IF
语句的语法如下:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
其中可选的内容像往常一样用括号标记; THEN
周围没有括号,因此这是必需的。
关于mysql - MySQL 存储过程中 SET 出现神秘语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7480937/