Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql触发器中使用case/if/else时出现语法错误_Mysql_Sql_Triggers - Fatal编程技术网

在mysql触发器中使用case/if/else时出现语法错误

在mysql触发器中使用case/if/else时出现语法错误,mysql,sql,triggers,Mysql,Sql,Triggers,我在MySQL触发器中使用case语句。 但是在MySQL的触发器中使用case-block/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 UPD

我在MySQL触发器中使用case语句。 但是在MySQL的触发器中使用case-block/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 ;
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;
错误 抱歉,发生了意外错误

使用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 ;
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结尾;以及如果声明需要终止,且终止条件为:;与开始匹配的结尾应该以您设置的分隔符终止。请阅读此内容,我面临另一个触发错误,您能帮忙吗