mysql - 如何捕获并重新抛出 MySQL 中的所有错误

标签 mysql stored-procedures handler

我似乎无法在任何地方找到如何捕获和重新抛出过程中可能发生的任何错误或警告。

我想要的是执行以下操作的语法:

create procedure myProcedure()
  begin

      declare exit handler for ANYTHING_WRONG_THAT_CAN_BE_CAUGHT_WARNINGS_INCLUDED
      begin
          rollback;
          RE_THROW THE_THING_THAT_WAS_CAUGHT;
      end;

      start transaction;
         -- do some stuff
      commit;
  end; //

原因是我想强制回滚错误或警告,但让客户端决定如何处理特定错误。

全大写区域是我不知道该放什么的部分。

感谢您的帮助!

编辑-------

从那以后,我了解到不可能按照我的要求做:'(。

相反,我对任何出错的地方都有一个错误,并使用了以下代码:

declare exit handler for sqlwarning, sqlexception begin
    rollback;
    call error();
end;

(错误()不存在)

最佳答案

要捕获所有 SQL 异常,请使用:

DECLARE EXIT HANDLER FOR SQLEXCEPTION

SQLWARNINGS 也可用于捕获警告。

在异常处理程序中,要引发刚刚捕获的错误或警告,请使用:

RESIGNAL

请参阅 RESIGNAL 语句的文档:

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

自 MySQL 5.5 起可用

关于mysql - 如何捕获并重新抛出 MySQL 中的所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095832/

相关文章:

mysql - 相关子查询更新

php - 在 HTML 下拉 <select> 列表中显示数据库表值

MySQL SELECT 连接 3 个表,并具有所有行的条件

postgresql - 在 PostgreSQL 中创建一个永不回滚的存储过程?

java - 减慢应用程序速度

c# - ASP.NET 中有多少种类型的 Http Handler

mysql - MySQL如何执行有限制的聚合查询?

MySQL过程DATE变量操作

sql-server - 是否有内置的方法来存储针对存储过程的版本号?

CouchDB:批量更新最佳实践