首页 > 解决方案 > 如何构造 if exists 查询以产生错误消息

问题描述

我创建了一个用于将新列插入表中的过程,并且我做了一个IF声明,基本上说如果输入的日期早于当前日期或未来至少 30 天,那么现在抛出一个错误我想创建一个IF语句,如果其中一行存在,则只插入一个新列......表中只有三个可能的课程,所以程序要求提供课程代码和日期,有人可以推我当未输入三个代码之一时,如何构造我的 IF 语句以给出错误的正确方向?

不知道用什么关键词。

这是我IF的日期检查声明:

IF (give_date < DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) OR (give_date <= CURDATE()) THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Please Enter A Date Over One Month';
ELSEIF (WEEKDAY(give_date) = 5 )THEN SET loop_date = DATE_ADD(give_date, INTERVAL 2 DAY);
ELSEIF (WEEKDAY(give_date) = 6 )THEN SET loop_date = DATE_ADD(give_date, INTERVAL 1 DAY);
ELSE SET loop_date = give_date;
END IF;

我正在尝试做这样的事情......

    IF (new_code, EXISTS IN (module (course_code)) THEN 
    SIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'Please Check Entered Course And Try Again';
    END IF;

也试过这样做,但得到一个错误,说子查询返回多行......

IF give_code != ( SELECT course_code FROM module WHERE course_code = ('WSD' OR 'DDM' OR 'NSF'))THEN 
    SIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'Please Check Entered Course And Try Again'; END IF;

标签: mysqlmysql-workbench

解决方案


对你起作用吗?

IF ( SELECT count(*) FROM module WHERE course_code in ('WSD','DDM','NSF')) > 0 
THEN 
    SIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'Please Check Entered Course And Try Again'; 
END IF;

推荐阅读