【问题标题】:How to catch and re-throw all errors in MySQL如何捕获并重新抛出 MySQL 中的所有错误
【发布时间】:2012-10-17 05:52:31
【问题描述】:

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

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

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;

(错误()不存在)

【问题讨论】:

  • 这个问题将提供部分解决方案:stackoverflow.com/questions/18858567/…
  • 为什么是“部分”?缺少什么?
  • 感谢您的提问和回答,我在同一个主题上浪费了很多小时,终于找到了您的帖子。欢呼

标签: mysql stored-procedures handler


【解决方案1】:

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

DECLARE EXIT HANDLER FOR SQLEXCEPTION

SQLWARNINGS 也可用于捕获警告。

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

RESIGNAL

请参阅 RESIGNAL 声明的文档:

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

这从 MySQL 5.5 开始可用

【讨论】:

  • 这正是我要找的。按预期工作!谢谢!
猜你喜欢
  • 2017-07-06
  • 1970-01-01
  • 2014-12-22
  • 2022-01-17
  • 1970-01-01
  • 2020-09-24
  • 2023-03-28
  • 2021-04-01
相关资源
最近更新 更多