忽略MySQL退出处理程序

时间:2014-12-04 12:15:53

标签: mysql sql stored-procedures error-handling

我的存储过程正在忽略退出处理程序。我执行以下行:

CALL updateTemplate('MyObject', 'NewTemplate');

收到错误:

  

错误代码:1452。无法添加或更新子行:外键约束失败(dbobjects,CONSTRAINT Object: Template Foreign Key FOREIGN KEY(TemplateId)参考templatesTemplateId)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。

1 个答案:

答案 0 :(得分:1)

(Acknowledge GarethD)

这是由版本5.7.2中修复的错误引起的。

升级到MySQL 5.7.5,现在一切正常。

http://bugs.mysql.com/bug.php?id=68831