【发布时间】:2015-05-07 13:41:24
【问题描述】:
我在 MySQL 中有以下存储过程
CREATE DEFINER=`test_db`@`%` PROCEDURE `ADD_ATTENDANCE`(IN `programID` INT, IN `clientID` INT, IN `insDate` DATETIME, IN `updDate` DATETIME, IN `insUser` INT, IN `updUser` INT, IN `lessonDate` DATE, IN `lessonTime` TIME)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Add attedance to my calendar'
BEGIN
DECLARE max_sub, availability INT;
DECLARE cursor_max_sub CURSOR FOR SELECT max_sub FROM app_lesson WHERE id = programID;
DECLARE cursor_availability CURSOR FOR SELECT count(*) FROM attendance WHERE program_id = programID AND lesson_date = lessonDate AND lesson_time = lessonTime;
OPEN cursor_max_sub;
OPEN cursor_availability;
read_loop: LOOP
FETCH cursor_max_sub INTO max_sub;
FETCH cursor_availability INTO availability;
IF (availability < max_sub) THEN
insert into attendance (program_id, client_id, ins_date, upd_date, ins_user, upd_user, lesson_date, lesson_time)
values (programID, clientID, insDate, updDate, insUser, updUser, lessonDate, lessonTime);
LEAVE read_loop;
ELSE
insert into attendance_hold (program_id, client_id, ins_date, upd_date, ins_user, upd_user, lesson_date, lesson_time)
values (programID, clientID, insDate, updDate, insUser, updUser, lessonDate, lessonTime);
END IF;
END LOOP;
CLOSE cursor_max_sub;
CLOSE cursor_availability;
END;
即使 cursor_max_sub 等于 6 并且 cursor_availability 等于 4 我的过程总是执行 else 插入语句。你能帮帮我吗?
谢谢!!!
【问题讨论】:
-
你确定你的 if 条件吗?
-
如何以及何时退出循环?将您的示例与此处的示例进行比较:dev.mysql.com/doc/refman/5.0/en/cursors.html。我会为游标不返回任何值的情况添加一些代码...
-
你好。感谢特里尼蒙的评论。由于某种原因,即使 SQL 返回 6,max_sub 游标也会返回 NULL
-
是id = programID参数吗?给我们看整个过程
-
我只是编辑我的帖子并添加完整的声明