2012-10-26 43 views
17

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

我想是这样做的语法如下:

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; 

(误差()不存在)

+0

此问题将提供部分解决方案:http://stackoverflow.com/questions/18858567/mysql-exception-handler-access-excep正在处理 – djechlin

+1

为什么'部分'?少了什么东西? – rsanchez

回答

18

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

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS也可以用来捕捉警告。

里面的异常处理程序,以提高刚赶上了错误或警告,使用方法:

RESIGNAL 

请参阅RESIGNAL语句文档:

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

这是可用的,因为MySQL 5.5

+1

这正是我要找的。按预期工作!谢谢! –