【问题标题】:Unknow column in a MySQLTrigger executionMySQL 触发器执行中的未知列
【发布时间】:2020-06-02 19:04:20
【问题描述】:

我的数据库上没有任何语法错误的触发器:

DROP TRIGGER IF EXISTS image_demand;
DELIMITER //
CREATE TRIGGER image_demand BEFORE INSERT ON demand_img
FOR EACH ROW
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE val DATE DEFAULT NULL;
    DECLARE minValue CURSOR FOR SELECT min(date_demand) AS RES FROM demand_img;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN minValue;
    read_loop : LOOP
        FETCH minValue INTO val;
        IF done THEN
            LEAVE read_loop;
        END IF;
    END LOOP;
    CLOSE minValue;
    IF minValue IS NOT NULL THEN
        SET NEW.date_demand = val + INTERVAL 1 HOUR;
    END IF;
END //

它尝试从数据库中已设置的最小值开始将 1 小时添加到即将插入的新寄存器中。但是当我尝试使用 INSERT 命令插入新的 image_demand 组件时,它会失败并出现以下错误:

18:16:40    INSERT INTO `database`.`demand_img` (USER_ID_FK, IMG_ID) VALUES (2, 'asdfasdfasdfa')    
Error Code: 1054. Unknown column 'minValue' in 'field list' 0.000 sec

如您所见,minValue是来自Trigger的变量,所以我认为错误来自它,但我看不到它在哪里。也许我设置 minValue 不正确?

感谢您的帮助

J.

【问题讨论】:

  • 只是一个旁注,但你不应该需要一个光标。
  • 是否可以直接分配一个唯一的结果?
  • 是的,我的 MySQL 有点生疏了,但应该是 SELECT MIN(date_demand) INTO val FROM demand_imgSET val = (SELECT MIN...) 之类的东西;游标往往相对昂贵,因此通常应该很少使用。如果您正在使用光标,但不确定是否需要它,您可能不需要。

标签: mysql sql stored-procedures triggers


【解决方案1】:

好的,我明白我的错误了。很抱歉打扰你。 IF minValue 应该是 IF val

MySQL 编译它没有显示任何错误。

对不起,谢谢。

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2015-02-26
    • 2021-04-10
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多