2012-10-26 3 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; // 

내가 수행 할 작업을 결정하는 오류 또는 경고에 롤백을 강제하지만 클라이언트에 맡길 것인지되는 이유 특정 오류.

모든 대문자 영역은 무엇을 넣을 지 모르는 부분입니다.

도움 주셔서 감사합니다.

편집 -------

난 이후 내가 부탁 한 일을 할 수 없습니다 배웠습니다 :. '(

을 대신 내가 잘못되면 아무것도에 대해 하나의 오류를 가지고 다음 코드를 사용 : 모든 SQL 예외를 잡으려고

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

을 사용 :

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS 경고를 catch하는데도 사용할 수 있습니다. 예외 처리기 내부

바로 잡힌 오류 또는 경고를 높이기 위해 사용 :

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

이 이후로 볼 수 있습니다 :

RESIGNAL 

가 RESIGNAL 문에 대한 설명서를 참조하십시오 MySQL 5.5

+1

이것이 내가 원하는 것입니다. 예상대로 작동합니다! 고맙습니다! –

관련 문제