如何捕获mysql触发器和存储过程中的异常?

Hit*_*esh 2 mysql triggers stored-procedures

我一直在尝试捕获 mysql 异常,尤其是触发器和存储过程。我们如何从 mysql 端捕获异常?我仍然没有找到任何解决方案。您的帮助将不胜感激。

谢谢希特什

Kyl*_*son 5

因为这出现在我搜索触发器中的 MySQL 错误处理的顶部,所以我想分享我的 MySQL 5.5+ 解决方案

我的原始帖子:/sf/answers/1828066201/复制如下...

因为当我在 MySQL 触发器中搜索错误处理时,这篇文章出现在顶部,所以我想我应该分享一些知识。

如果出现错误,您可以强制 MySQL 使用SIGNAL,但是如果您不将其指定为 SQLEXCEPTION 类,那么什么也不会发生,因为并非所有 SQLSTATE 都被认为是坏的,即使这样您也必须如果您有任何嵌套的 BEGIN/END 块,请确保RESIGNAL 。

或者,可能更简单,在触发器中声明一个退出处理程序并重新发出异常信号。

CREATE TRIGGER `my_table_AINS` AFTER INSERT ON `my_table` FOR EACH ROW
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
        RESIGNAL;
    DECLARE EXIT HANDLER FOR SQLWARNING
        RESIGNAL;
    DECLARE EXIT HANDLER FOR NOT FOUND
        RESIGNAL; 
    -- Do the work of the trigger.
END
Run Code Online (Sandbox Code Playgroud)

如果你的身体发生错误,它会被抛回顶部并错误退出。这也可以用于存储过程等。

这适用于任何 5.5+ 版本。