MySQL触发器报错信息中嵌入CURDATE()返回实际日期的实现方法
MySQL触发器报错信息嵌入动态日期解决方案
问题原因
原代码中CURDATE()被包裹在静态字符串中,MySQL不会解析字符串内部的函数调用,只会将其作为普通文本输出。
修正方案
使用MySQL内置的CONCAT()函数拼接固定报错文本和CURDATE()的动态返回值即可,同时注意原代码末尾DELIMITER后缺少空格,会触发语法错误,完整修正代码如下:
DELIMITER $$ CREATE TRIGGER invalid_date BEFORE INSERT ON invoice FOR EACH ROW BEGIN IF NEW.date_in <> CURDATE() THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = CONCAT("TriggerError: The date_in date should be ", CURDATE()); END IF; END$$ DELIMITER ;
可选优化
如果需要同时提示用户输入的错误日期,可调整拼接逻辑,示例如下:
CONCAT("TriggerError: Input date ", NEW.date_in, " is invalid, required date is ", CURDATE())
内容的提问来源于stack exchange,提问作者zniperxpert games and tips
相关产品推荐
相关产品推荐

