2012-10-26 72 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

這正是我要找的。按預期工作!謝謝! –