【发布时间】: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 结束;并且与开始匹配的结尾应该以您将分隔符设置为的任何内容终止。