首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发器上的MySQL语法错误

问触发器上的MySQL语法错误
EN

Stack Overflow用户
提问于 2014-07-01 08:07:13
回答 2查看 64关注 0票数 0

我无法在MySQL 5.3上编译这个触发代码:

代码语言:javascript
复制
CREATE TRIGGER crmenq_bur 
BEFORE UPDATE 
ON crmenquiries
FOR EACH ROW
BEGIN
   IF (    NEW.feedback = OLD.feedback 
       AND NEW.notes = OLD.notes
       AND NEW.estatus = OLD.estatus )
   THEN
      SET NEW.update_type = 'NN';
   ELSE
      SET NEW.update_type = 'SEN';
      SET new.last_update2 = now();
   END IF;
   CASE 
      WHEN NEW.estatus != OLD.estatus AND NEW.estatus = 'FP3' THEN
         SET NEW.uid_follow_up = NEW.uid_last_update_by;
         SET NEW.follow_up_date = DATE_ADD ( date(), INTERVAL 3 MONTH );
      WHEN NEW.estatus != OLD.estatus AND NEW.estatus = 'FP6' THEN
         SET NEW.uid_follow_up = NEW.uid_last_update_by;
         SET NEW.follow_up_date = DATE_ADD ( date(), INTERVAL 6 MONTH );
      WHEN NEW.estatus != OLD.estatus AND NEW.estatus = 'FP9' THEN
         SET NEW.uid_follow_up = NEW.uid_last_update_by;
         SET NEW.follow_up_date = DATE_ADD ( date(), INTERVAL 9 MONTH );
      WHEN NEW.estatus != OLD.estatus AND NEW.estatus = 'FP12' THEN
         SET NEW.uid_follow_up = NEW.uid_last_update_by;
         SET NEW.follow_up_date = DATE_ADD ( date(), INTERVAL 12 MONTH );
      WHEN NEW.estatus NOT IN ( 'FP3', 'FP6', 'FP9', 'FP12' ) THEN
         SET NEW.uid_follow_up = NULL;
         SET NEW.follow_up_date = NULL;
   END CASE;
END;

当我运行这个程序时,我会得到以下错误:

代码语言:javascript
复制
[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 '), INTERVAL 3 MONTH ); WHEN NEW.estatus != OLD.estatus AND NEW.estatus = ' at line 18]

最初,我嵌套了IF,但更改为CASE,以查看这是否产生了任何不同。当前的表单并不是我最初使用它的方式(嵌套IF以避免重复相同的条件),但是每次尝试失败,代码都被更改了,但是我尝试过的任何东西都没有起作用。

列/表名是正确的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 09:32:07

引发的错误是由于调用MySQL date()函数造成的。它被误用了。

我不确定你是否打算用现在的日期。

如果是,您可以对代码中的所有date()用法使用以下任何建议。

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_curdate --返回当前日期 http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_current-date -- CURDATE()的同义词 http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_current-date -- CURDATE()的同义词

示例:

代码语言:javascript
复制
mysql> select curdate(), current_date(), current_date;
+------------+----------------+--------------+
| curdate()  | current_date() | current_date |
+------------+----------------+--------------+
| 2014-07-01 | 2014-07-01     | 2014-07-01   |
+------------+----------------+--------------+

您也可以使用http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_date函数,但它接受date、datetime或timestamp类型的输入参数。

示例:

代码语言:javascript
复制
mysql> select date( sysdate() ), date( now() ), date( curtime() ), date( curdate() );
+-------------------+---------------+-------------------+-------------------+
| date( sysdate() ) | date( now() ) | date( curtime() ) | date( curdate() ) |
+-------------------+---------------+-------------------+-------------------+
| 2014-07-01        | 2014-07-01    | 2014-07-01        | 2014-07-01        |
+-------------------+---------------+-------------------+-------------------+

指的是文档:

票数 1
EN

Stack Overflow用户

发布于 2014-07-01 08:12:27

在启动之前使用类似于Delimiter $$的内容更改分隔符,并使用新的分隔符结束触发器。当你完成任务后,把它改回来,就像这样:

代码语言:javascript
复制
Delimiter $$
CREATE TRIGGER crmenq_bur 
BEFORE UPDATE 
ON crmenquiries
FOR EACH ROW
BEGIN
 /* Body of code here */
END $$
Delimiter ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24505323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档