【问题标题】:MySQL exit handler ignoredMySQL 退出处理程序被忽略
【发布时间】:2015-02-02 07:47:06
【问题描述】:

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

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

并收到错误:

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

【问题讨论】:

标签: mysql sql stored-procedures error-handling


【解决方案1】:

(确认 GarethD)

这是由于版本 5.7.2 中修复的错误所致。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多