2014-12-04 85 views
3

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

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

和接收错误:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (db . objects , CONSTRAINT Object: Template Foreign Key FOREIGN KEY (TemplateId) REFERENCES templates (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。

+1

我认为这是由于[即固定在5.7.2中的错误(http://bugs.mysql.com/bug.php?id=68831)。 – GarethD 2014-12-04 12:40:23

+0

谢谢。我会升级并报告回来。 – Franzl 2014-12-04 12:45:44

回答