2012-10-26 15 views
17

Nie mogę znaleźć nigdzie, jak złapać i ponownie rzucić błędy lub ostrzeżenia, które mogą wystąpić w procedurze.Jak złapać i ponownie wyrzucić wszystkie błędy w MySQL

Co chcę jest składnia aby wykonać następujące czynności:

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; // 

Wynika to z faktu, że chcę wymusić wycofywania się na błędzie lub ostrzeżenie, ale pozostawić go do klienta, aby zdecydować, co zrobić z konkretny błąd.

Obszary z wszystkimi ograniczeniami to części, w których nie wiem, co umieścić.

Dzięki za pomoc!

Edycja -------

Mam ponieważ dowiedział się, że nie jest możliwe, aby robić to, co ja zapytałem: ". (

Zamiast mam jeden błąd za wszystko, co idzie źle i używany następujący kod:

declare exit handler for sqlwarning, sqlexception begin 
    rollback; 
    call error(); 
end; 

(błąd() nie istnieje)

+0

To pytanie stanowiłoby częściowe rozwiązanie: http://stackoverflow.com/questions/18858567/mysql-exception-handler-access-excep w jaki sposób "częściowy" traktowany jest jako " – djechlin

+1

"? czego brakuje? – rsanchez

Odpowiedz

18

złapać wszystkie wyjątki SQL, zastosowanie:

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS może być również używany do łapania ostrzeżeń.

Wewnątrz obsługi wyjątków, aby podnieść błąd lub ostrzeżenie, że właśnie złowione, zastosowanie:

RESIGNAL 

Zobacz dokumentację dla RESIGNAL oświadczenie:

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

ta jest dostępna od MySQL 5.5

+1

To jest dokładnie to, czego szukam. Działa zgodnie z oczekiwaniami! Dziękuję Ci! –