【问题标题】:syntax error when using case / if/else inside mysql trigger在 mysql 触发器中使用 case/if/else 时出现语法错误
【发布时间】:2019-11-18 17:00:39
【问题描述】:

我在我的 MySQL 触发器中使用了 case 语句。 但是在 MySQL 的触发器中使用 case 块/if/else 时会出现语法错误。

使用案例

DELIMITER //
CREATE DEFINER=`root`@`localhost` 
       TRIGGER `color_changed` 
       AFTER INSERT ON `tb_tickets`
       FOR EACH ROW 
BEGIN
 CASE NEW.program_id
 WHEN 1 THEN
   UPDATE tb_sites_1 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 WHEN 2 THEN
   UPDATE tb_sites_2 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 WHEN 3 THEN
   UPDATE tb_sites_3
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 END
END
DELIMITER ;

错误 抱歉,发生意外错误!

使用 IF/ELSE

CREATE DEFINER=`root`@`localhost` 
       TRIGGER `color_changed` 
       AFTER INSERT ON `tb_tickets`
       FOR EACH ROW 
BEGIN
 IF NEW.program_id = 1 THEN
   UPDATE tb_sites_1 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 ELSEIF NEW.program_id = 2 THEN
   UPDATE tb_sites_2 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 ELSE
  UPDATE tb_sites_3
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 END
END;

错误

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 9 行的 '' 附近使用正确的语法

【问题讨论】:

  • 语法错误状态究竟是什么?
  • #1064 。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 10 行 @EricJ 的 '' 附近使用正确的语法。
  • 你在设置分隔符吗?
  • case 语句需要以 end case 结束; and if 语句需要以 end if 结束;并且与开始匹配的结尾应该以您将分隔符设置为的任何内容终止。

标签: mysql sql triggers


【解决方案1】:

总是最好阅读整个评论。你错过了最后的案例;和结束 //(作为开始)

DELIMITER //
CREATE TRIGGER T
       AFTER INSERT ON `tb_tickets`
       FOR EACH ROW 
BEGIN
 CASE NEW.program_id
 WHEN 1 THEN
   UPDATE tb_sites_1 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 WHEN 2 THEN
   UPDATE tb_sites_2 
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 WHEN 3 THEN
   UPDATE tb_sites_3
   SET color_status = NEW.status 
   WHERE site_id = NEW.site_id;
 END CASE;
END //
DELIMITER ;

如果您有任何其他错误,请添加完整的错误。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2019-06-12
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多