如何在 MySQL 5.5 中获取存储过程的异常消息

Posted

技术标签:

【中文标题】如何在 MySQL 5.5 中获取存储过程的异常消息【英文标题】:How to get exception message on stored procedure in MySQL 5.5 【发布时间】:2012-08-31 04:10:02 【问题描述】:

我正在使用 mysql 5.5。要在 MySQL 5.6 上获取异常消息,请使用 GET DIAGNOSTIC 函数。 MySQL 5.5 有没有类似的功能,..?我正在做的项目已经在使用 MySQL 5.5 版本了。

【问题讨论】:

【参考方案1】:

您可以尝试使用SHOW ERRORSHOW WARNING。要查看最后一个错误或警告,您可以将其用作:

SHOW ERRORS LIMIT 1   -- for SQL-state > 2
SHOW WARNINGS LIMIT 1 -- for SQL-state 1,2

为了防止列出每个错误,您可以像这样处理一类 SQL 错误:

SQLWARNING 是开头的 SQLSTATE 值类的简写 与“01”。

NOT FOUND 是开头的 SQLSTATE 值类的简写 与“02”。这仅在游标的上下文中相关并且是 用于控制游标到达数据末尾时发生的情况 放。如果没有更多行可用,则会出现无数据条件 SQLSTATE 值为 02000。要检测这种情况,可以设置一个 它的处理程序(或未找到条件)。一个例子显示在 第 12.7.5 节,“游标”。这种情况也发生在 SELECT ... INTO var_list 语句不检索任何行。

SQLEXCEPTION 是 SQLSTATE 值类的简写,它不 以“00”、“01”或“02”开头。

所以要处理异常,你只需要:

DECLARE EXIT HANDLER FOR SQLSTATE SQLEXCEPTION .....;

链接:

http://dev.mysql.com/doc/refman/5.5/en/signal.html

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

【讨论】:

我试过了,但没有出现错误。它只显示空白行。我把SHOW ERRORS 语法放在DECLARE EXIT HANDLER FOR SQLEXCEPTION 里面是不是错了,.? 我只能得到消息吗,.? :) 您不需要在DECLARE EXIT HANDLER FOR SQLEXCEPTION 中包含SHOW ERRORSHOW ERROR 可以独立使用。只需将其包含在您的程序中即可。 我明白了,一开始并没有显示错误,因为show errors之前有一个rollback。我只能得到消息吗,.?因为我需要它将错误存储到我的日志中。 如何获取错误代码或错误消息以便插入例如到你自己的日志错误表?

以上是关于如何在 MySQL 5.5 中获取存储过程的异常消息的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 5.5 中解析 JSON

九、存储过程中异常的处理

如何从存储过程中获取mysql游标值

MySQL 存储过程错误处理

mysql 异常 急求帮助

MySQL存储过程的“异常处理”