如何在MySQL中捕获和重新抛出所有错误

26

我似乎找不到任何关于如何捕获和重新抛出在过程中可能发生的错误或警告的信息。

我想要的是以下语法:

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;

(error()函数不存在)


这个问题可以提供部分解决方案:https://dev59.com/y3bZa4cB1Zd3GeqPL_MK - djechlin
1
为什么要使用“partial”?缺少了什么? - rsanchez
感谢您的问题和答案,我在同一主题上浪费了许多时间,最终找到了您的帖子。干杯! - MSBI-Geek
1个回答

30

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

DECLARE EXIT HANDLER FOR SQLEXCEPTION

SQLWARNINGS 可用于捕获警告。

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

RESIGNAL

请查看RESIGNAL语句的文档:

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

此功能自MySQL 5.5版本起可用。


1
这正是我所寻找的。效果如预期!谢谢! - Ngoc Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接