【问题标题】:MySQL stored procedure if statement not workingMySQL 存储过程 if 语句不起作用
【发布时间】: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参数吗?给我们看整个过程
  • 我只是编辑我的帖子并添加完整的声明

标签: mysql stored-procedures


【解决方案1】:

好的,这很棘手...由于某种原因,当我将max_sub 变量更改为maxNumberOfSubscription 时,一切都运行良好...max_sub 是 MySQL 的某种保留关键字还是因为我的变量是否与select语句返回的字段同名?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多