mysql触发器中的语法错误
Posted
技术标签:
【中文标题】mysql触发器中的语法错误【英文标题】:Syntax error in mysql trigger 【发布时间】:2012-03-20 03:02:28 【问题描述】:我试图找出这个触发器有什么问题。我是 mysql 触发器和存储过程的新手,所以我猜语法可能有问题。
-- Trigger DDL Statements
DELIMITER $$
USE `SNPB`$$
DROP TRIGGER IF EXISTS getMsnps$$
CREATE TRIGGER getMsnps AFTER INSERT ON m_snps
FOR EACH ROW
BEGIN
DECLARE glid int(10);
DECLARE lost int(1);
DECLARE st int(10);
DECLARE vto varchar(20);
IF(EXISTS( SELECT glyc_id FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac)) THEN
SELECT glyc_id,glyc_start INTO glid,st FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac;
SELECT all_snps.var_to INTO vto FROM all_snps,snp_map WHERE snp_map.snpb_id=NEW.snpb_id AND snp_map.ref>0 AND snp_map.all_snps_id=all_snp.all_snps_id;
set lost=0;
IF NEW.uni_pos=st AND vto!='n' AND vto!='N' THEN
set lost=1;
END IF;
IF NEW.uni_pos=st+1 AND (vto='p' OR vto='P') THEN
set lost=1;
END IF;
IF NEW.uni_pos=st+2 AND vto!='s' AND vto!='S' AND vto!='t' AND vto!='T' THEN
set lost=1;
END IF;
INSERT INTO glyc_map (glyc_id,snpb_id,loss) VALUES (glid,NEW.snpb_id,lost);
END IF;
END;
$$
DELIMITER ;
因此,当我在“m_snps”表中插入行(单个语句插入多行)时,我应该在“glyc_map”表中获得一些行,但这永远不会发生。我希望有人能告诉我语法是对还是错。
【问题讨论】:
你得到一个错误 1064,但是有什么错误信息? @ta.speot.isDELIMITER
语句只针对 MySQL 命令行客户端,并不是整个 RDBMS 实现的必要功能。
我没有收到任何错误!这才是真正让我心烦意乱的地方。一切似乎都很好。
伙计们非常感谢您的快速回复,但我找到了答案!毕竟这不是语法错误。非常感谢
@user1279904:那么您应该发布一个答案,以帮助遇到此问题的其他人。 :-)
【参考方案1】:
你所有的代码都在IF
:
IF(EXISTS( SELECT glyc_id FROM glyc ...
-- rest of code, including the insert statement
END IF;
如果条件为假,你什么都不会发生。
【讨论】:
以上是关于mysql触发器中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章