MySQL错误:1337

时间:2013-09-13 07:48:02

标签: mysql

我在尝试在MySQL中创建过程时遇到此错误:

Error Code: 1337
Variable or condition declaration after cursor or handler declaration

即使做了很多谷歌搜索后,我发现没有相关解决方案来解决我的问题。我的程序如下:

DELIMITER //
CREATE PROCEDURE emp_dates(IN startDate DATE, IN endDate DATE)
BEGIN
DECLARE fromDt DATETIME;
DECLARE toDt DATETIME;
DECLARE done INT DEFAULT FALSE;
DECLARE employees CURSOR FOR SELECT empid FROM employees;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
DECLARE emp VARCHAR(20);
SET fromDt=startDate;
SET toDt=endDate;

OPEN employees;

WHILE fromDt<=toDt DO
REPEAT
    FETCH employees INTO emp;
    IF NOT done THEN
    INSERT INTO new_attendance_2(attid,empid,dt) VALUES(DEFAULT,emp,fromDt);
    END IF
UNTIL done END REPEAT;
SET fromDt=DATE_ADD(fromDt, INTERVAL 1 DAY);
LOOP
CLOSE employees;
END
DELIMITER ;

目的是创建一个过程,该过程将两个日期作为输入,并在其他表中插入记录,以便在这两个日期之间进行。 有人请帮忙!我很感激任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:23)

显然抱怨:

Variable or condition declaration after cursor or handler declaration

所以我会在这里看到你确实在游标和处理程序之后声明变量

   DECLARE employees CURSOR FOR SELECT empid FROM employees;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
>> DECLARE emp VARCHAR(20);

如果您修改声明,那就应该没问题:

DECLARE fromDt DATETIME;
DECLARE toDt DATETIME;
DECLARE done INT DEFAULT FALSE;
DECLARE emp VARCHAR(20);

DECLARE employees CURSOR FOR SELECT empid FROM employees;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;

订单必须符合here

  

游标声明必须出现在处理程序声明之前以及变量和条件声明之后。

答案 1 :(得分:2)

您需要重新订购声明。

Cursor declarations must appear before handler declarations 
and after variable and condition declarations.

http://dev.mysql.com/doc/refman/5.1/en/cursors.html