0

我必须创建一个需要 current_timestamp + 分钟的触发器,并说如果它比 current_timestamp 旧,它应该插入到一个新表中。

我已经玩了 8 个小时了,但似乎无法让它工作。有人对此有解决方案吗?

这是我的想法:

DELIMITER //
CREATE TRIGGER create_comment
AFTER UPDATE ON aflaesning
FOR EACH ROW 
BEGIN 
IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut-900)) THEN
INSERT INTO aflaesningkommentar(aflaesningaflaesning,aflaesning_id) VALUES('That was too late',     NEW.aflaesnings_id);
END IF;
END;
DELIMITER//

它从表 Loadings 中获取 TIMESTAMP (ExpectedEnd),如果时间戳早于分钟,则必须将该行放入表中。但它在 END IF// 上出错

提前致谢

4

2 回答 2

1

主要问题是您使用的分隔符。您应该在 之后使用分号END IF,然后在触发器末尾使用 the//之后END(也缺少)。

另外,与错误无关,我认为您的条件是错误的。你可能想要这样做:

IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut)-900) THEN

而不是这个:

IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut-900)) THEN

所以是这样的:

DELIMITER //
CREATE TRIGGER create_comment
AFTER UPDATE ON aflaesning
FOR EACH ROW 
BEGIN 
IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut)-900) THEN
INSERT INTO aflaesningkommentar(aflaesningaflaesning,aflaesning_id) VALUES('That was too late',     NEW.aflaesnings_id);
END IF;
END //
DELIMITER;
于 2013-05-29T20:56:43.573 回答
0

尝试将您的 IF 条件更改为:

IF (TIME_TO_SEC(OLD.forventetSlut) - TIME_TO_SEC(NEW.aktuelSlut) < -900) THEN

另外,将最后一个分号更改END//.

最后,尝试从源代码中删除所有空格并替换为空格和换行符。Mysql 无法处理触发源中的制表符。

于 2013-05-29T20:54:12.170 回答