[英]MySQL Syntax Error on Trigger
我無法在MySQL 5.3上編譯此觸發代碼:
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;
運行此命令時,出現以下錯誤:
[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看看是否有什么不同。 當前的格式不是我最初使用的格式(如果避免重復相同的條件,則嵌套該格式),但是每次嘗試均失敗,則代碼被更改,但我嘗試過的任何方法都沒有起作用。
列/表名稱正確。
引發錯誤是由於調用MySQL date()
函數引起的。 它被錯誤地使用了。
我不確定您是否打算使用當前日期。
如果是,則可以對代碼中的所有date()
用法使用以下任何建議。
curdate() -返回當前日期
current_date() -CURDATE()
同義詞
current_date -CURDATE()
同義詞
范例 :
mysql> select curdate(), current_date(), current_date;
+------------+----------------+--------------+
| curdate() | current_date() | current_date |
+------------+----------------+--------------+
| 2014-07-01 | 2014-07-01 | 2014-07-01 |
+------------+----------------+--------------+
您也可以使用date()
函數,但是它使用類型為date
, datetime
或timestamp
的輸入參數。
范例 :
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 |
+-------------------+---------------+-------------------+-------------------+
請參閱文檔 :
在開始之前,使用Delimiter $$
類的內容更改定界符,並使用新的定界符結束觸發器。 完成后將其改回,如下所示:
Delimiter $$
CREATE TRIGGER crmenq_bur
BEFORE UPDATE
ON crmenquiries
FOR EACH ROW
BEGIN
/* Body of code here */
END $$
Delimiter ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.