MySQL创建触发器(包括变量)语法

MySQL创建触发器(包括变量)语法,mysql,triggers,Mysql,Triggers,在END触发器语法方面有点问题,得到: #1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,了解第30行“END”附近要使用的正确语法 …知道它有什么问题吗 DELIMITER // DROP TRIGGER IF EXISTS trg_tblOptymaster_AFTER_UPDATE // CREATE TRIGGER trg_tblOptymaster_AFTER_UPDATE AFTER UPDATE ON tblOptyMaster FOR EACH

END
触发器语法方面有点问题,得到:

#1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,了解第30行“END”附近要使用的正确语法

…知道它有什么问题吗

DELIMITER //
DROP TRIGGER IF EXISTS trg_tblOptymaster_AFTER_UPDATE //

CREATE TRIGGER trg_tblOptymaster_AFTER_UPDATE AFTER UPDATE ON tblOptyMaster 
FOR EACH ROW BEGIN
 DECLARE DateFrom DATE;
 DECLARE DateTo DATE;

 SET @DateFrom=DATE_ADD(OLD.DueDate, INTERVAL 6 MONTH);
 SET @DateTo=DATE_ADD(NEW.DueDate, INTERVAL 6 MONTH);

 INSERT INTO tblOptyDueDateMovement 
    (
    OpportunityCRMID, 
    SnapshotDate, 
    DueDateFrom, 
    DueDateTo,
    DueDateSlippage_Days,
    DueDateSlippage_Months,
    DueDateSlippage_FYs
    ) 
    VALUES 
    (
    NEW.OpportunityCRMID, 
    NEW.SnapshotDate,
    OLD.DueDate,
    NEW.DueDate,
    TIMESTAMPDIFF(DAY,DueDateFrom, DueDateTo),
    TIMESTAMPDIFF(MONTH,DueDateFrom, DueDateTo),
    TIMESTAMPDIFF(YEAR,@DateFrom, @DateTo)
    )

END; //

DELIMITER ;

我终于弄对了,我发现分隔符和语法可能有点混乱,因为我不总是使用MySQL:

我错过了一个


错误消息与您的代码不匹配。很抱歉,我在提交之前已重试,并对其进行了轻微更改。我已经纠正了一些,仍然有问题的结束。。。
DELIMITER //
DROP TRIGGER IF EXISTS trg_tblOptymaster_AFTER_UPDATE //

CREATE TRIGGER trg_tblOptymaster_AFTER_UPDATE AFTER UPDATE ON tblOptyMaster 
FOR EACH ROW BEGIN
 DECLARE DateFrom DATE;
 DECLARE DateTo DATE;

 SET @DateFrom=DATE_ADD(OLD.DueDate, INTERVAL 6 MONTH);
 SET @DateTo=DATE_ADD(NEW.DueDate, INTERVAL 6 MONTH);

 INSERT INTO tblOptyDueDateMovement 
    (
    OpportunityCRMID, 
    SnapshotDate, 
    DueDateFrom, 
    DueDateTo,
    DueDateSlippage_Days,
    DueDateSlippage_Months,
    DueDateSlippage_FYs
    ) 
    VALUES 
    (
    NEW.OpportunityCRMID, 
    NEW.SnapshotDate,
    OLD.DueDate,
    NEW.DueDate,
    TIMESTAMPDIFF(DAY,DueDateFrom, DueDateTo),
    TIMESTAMPDIFF(MONTH,DueDateFrom, DueDateTo),
    TIMESTAMPDIFF(YEAR,@DueDateFrom, @DueDateTo)
    );

END//
DELIMITER ;