我的存储过程正在忽略退出处理程序。我执行以下行:
CALL updateTemplate('MyObject', 'NewTemplate');
收到错误:
实际上,约束确实失败了,因为' NewTemplate'模板表中不存在。但是为什么我在下面的存储过程的退出处理程序中没有收到自定义错误消息?错误代码:1452。无法添加或更新子行:外键约束失败(
db
。objects
,CONSTRAINTObject: Template Foreign Key
FOREIGN KEY(TemplateId
)参考templates
(TemplateId
)ON UPDATE CASCADE)
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。
答案 0 :(得分:1)
(Acknowledge GarethD)
这是由版本5.7.2中修复的错误引起的。
升级到MySQL 5.7.5,现在一切正常。