【问题标题】:MySql Syntax error when creating trigger to insert calculated value创建触发器以插入计算值时出现 MySql 语法错误
【发布时间】:2021-08-27 04:12:08
【问题描述】:

这是我第一次尝试创建 MySql 触发器,但遇到了无法识别的语法错误。我试图让触发器在更新行时插入计算值。下面是我的代码,但是当我尝试执行它时,我不断收到语法错误,而且我看不到错误在哪里。有人可以看看,我做错了什么?

DROP TRIGGER ins_cop_dhw;
CREATE TRIGGER ins_cop_dhw BEFORE INSERT ON `2017010001_data`
   FOR EACH ROW 
   BEGIN
       IF (NEW.`_007E` = 1 AND `_00A2` > 0) THEN
           SET NEW.`_00B7` = NEW.`_0096` / NEW.`_00A2`;
       END IF;
       IF (NEW.`_007D` = 1 AND `_00A2` > 0) THEN
           SET NEW.`_00B8` = (NEW.`_0096` / NEW.`_00A2`);
       END IF;
   END;

这是我在 MySQL Workbench 中遇到的错误,但没有多大帮助。 :/

Error Code: 1064. You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to 
use near '' at line 5

MySQL Workbench 将第 6 行的结尾突出显示为语法错误的开始。

【问题讨论】:

  • 嗯,这就像今天的第三个问题(我认为),我告诉人们发布他们收到的错误消息。
  • 看起来 DELIMITER 命令丢失了。
  • @FaNo_FN 你是对的,我已经编辑了问题以包含错误。
  • @Akina 你是什么意思?我不明白。
  • 学习CREATE PROCEDURE and CREATE FUNCTION Statements,尤其是代码示例和第一个代码块之后的文本,以及Defining Stored Programs。另请阅读 Workbench 的关于这一点的帮助。

标签: mysql triggers


【解决方案1】:

正如@Akina 所说,我错过了delimiter 语句。这是固定代码。

delimiter //
DROP TRIGGER ins_cop_dhw;
CREATE TRIGGER ins_cop_dhw BEFORE INSERT ON `2017010001_data`
   FOR EACH ROW 
   BEGIN
       IF (NEW.`_007E` = 1 AND NEW.`_00A2` > 0) THEN
           SET NEW.`_00B7` = NEW.`_0096` / NEW.`_00A2`;
       END IF;
       IF (NEW.`_007D` = 1 AND NEW.`_00A2` > 0) THEN
           SET NEW.`_00B8` = (NEW.`_0096` / NEW.`_00A2`);
       END IF;
   END//
   delimiter ;

根据@Akina 的建议,我阅读了 dev.mysql.com 网站上的Create Procedure 文档,下面的引文强调了使用delimiter 的重要性

该示例使用 mysql 客户端分隔符命令将语句分隔符从 ; 更改为to // 在定义过程时。这使 ;过程主体中使用的分隔符将传递给服务器,而不是由 mysql 本身解释。请参阅第 25.1 节,“定义存储程序”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多