【发布时间】: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_img或SET val = (SELECT MIN...)之类的东西;游标往往相对昂贵,因此通常应该很少使用。如果您正在使用光标,但不确定是否需要它,您可能不需要。
标签: mysql sql stored-procedures triggers