3
退出处理程序正在被我的存储过程忽略。我执行下面一行:忽略MySQL退出处理程序
CALL updateTemplate('MyObject', 'NewTemplate');
和接收错误:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (
db
.objects
, CONSTRAINTObject: Template Foreign Key
FOREIGN KEY (TemplateId
) REFERENCEStemplates
(TemplateId
) ON UPDATE CASCADE)
事实上,约束没有失败,因为“NewTemplate”不模板表中存在。但是,为什么我不在下面的存储过程的退出处理程序中收到自定义错误消息?
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateTemplate`(in inObjectId varchar(45), in inTemplateId varchar(45))
BEGIN
declare exit handler for 1452
begin
signal sqlstate '45000' set MESSAGE_TEXT = 'The template identifier is invalid.';
end;
UPDATE objects SET TemplateId=inTemplateId WHERE ObjectId=inObjectId;
END
有关信息,我正在运行MySQL 5.6.20。
我认为这是由于[即固定在5.7.2中的错误(http://bugs.mysql.com/bug.php?id=68831)。 – GarethD 2014-12-04 12:40:23
谢谢。我会升级并报告回来。 – Franzl 2014-12-04 12:45:44