【问题标题】:Create a trigger that checks dates [problem]创建一个检查日期的触发器[问题]
【发布时间】:2020-05-07 16:42:44
【问题描述】:

我有一个问题.. 需要的是创建一个触发器来检查销毁日期(dateEmpr)是否小于返回日期(dateRetEff),它增加了 10 天到日期返回

表结构

CREATE TABLE emprunter(
    numLivre VARCHAR(5),
    dateEmpr DATE,
    numInsc VARCHAR(5),
    dateRetEff DATE
);

这是我的代码 .. 它告诉我这是错误的

CREATE TRIGGER verifier_date 
BEFORE INSERT ON emprunter
FOR EACH ROW 
BEGIN
    if((SELECT DATEDIFF(NEW.dateRetEff, NEW.dateEmpr) from emprunter ) <0) then
        dateEmpr =  DATE_ADD(OLD.dateEmpr, INTERVAL 10 DAY);
    end if;
END;

1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 6 行的 '= DATE_ADD(OLD.dateEmpr, INTERVAL 10 DAY)' 附近使用正确的语法

【问题讨论】:

  • if((SELECT DATEDIFF(NEW.dateRetEff, NEW.dateEmpr) from emprunter ) &lt;0) then ... - 你不能比较行集和标量值。 ... then dateEmpr = ... - SET 操作员丢失。 ... DATE_ADD(OLD.dateEmpr, ... - OLD. 在 INSERT 期间不存在。

标签: mysql


【解决方案1】:
CREATE TRIGGER verifier_date 
    BEFORE INSERT ON emprunter
    FOR EACH ROW 
    BEGIN
        if NEW.dateRetEff < NEW.dateEmpr then
            SET NEW.dateEmpr =  NEW.dateEmpr + INTERVAL 10 DAY;
        end if;
    END;

fiddle

【讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 6 行的 '' 附近使用的正确语法
  • @Mohammed 代码是正确的。添加了指向小提琴的链接-查看并确保。也许您忘记了 DELIMITER 重新分配?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2011-02-15
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
相关资源
最近更新 更多