【发布时间】:2015-02-02 07:47:06
【问题描述】:
我的存储过程忽略了退出处理程序。我执行以下行:
CALL updateTemplate('MyObject', 'NewTemplate');
并收到错误:
错误代码:1452。无法添加或更新子行:外键约束失败 (
db.objects, CONSTRAINTObject: Template Foreign KeyFOREIGN KEY (TemplateId) REFERENCEStemplates(TemplateId)更新级联)
确实,约束确实失败了,因为模板表中不存在“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。
【问题讨论】:
-
我认为这是由于a bug that was fixed in 5.7.2。
-
谢谢。我会升级并报告。
标签: mysql sql stored-procedures error-handling