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

时间:2011-08-02 07:12:14

标签: mysql stored-procedures triggers

我一直在尝试捕获mysql异常,尤其是触发器和存储过程。如何从mysql端捕获异常?我还没有找到任何解决方案。你的帮助会很感激。

由于 亚太区首席技术官Matt

2 个答案:

答案 0 :(得分:2)

查看DECLARE HANDLER的语法

http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html

另外,如果您正在尝试调试SP,这可能对您有所帮助:

http://www.bluegecko.net/mysql/debugging-stored-procedures/

答案 1 :(得分:2)

因为这是我在触发器中搜索MySQL错误处理的首要问题,我想我会分享我的MySQL 5.5 +解决方案

我的原帖:https://stackoverflow.com/a/26115231/1733365重复下方......

因为当我在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

如果你的身体出现错误,它将被抛回到顶部并退出并出现错误。这也可以用于存储过程和诸如此类的东西。

适用于任何版本5.5 +。