2012-10-26 4 views
17

Ich kann nirgendwo finden, wie man Fehler oder Warnungen, die in einer Prozedur auftreten können, fangen und erneut werfen.Wie alle Fehler in MySQL zu fangen und erneut zu werfen

Was ich will, ist die Syntax des zu folgenden Aktionen:

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

Der Grund dafür ist, dass ich ein Rollback auf einem Fehler oder eine Warnung zwingen will, aber es an den Client überlassen, zu entscheiden, was zu tun der spezifische Fehler.

Die All-Cap-Bereiche sind die Bereiche, in denen ich nicht weiß, was ich setzen soll.

Danke für jede Hilfe!

bearbeitet -------

Ich habe da gelernt, dass es nicht möglich ist, zu tun, was ich gefragt habe. "(

Stattdessen ich für alles, was einen einzigen Fehler, die schief geht und den folgenden Code verwendet:

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

(Fehler() nicht existiert)

+0

Diese Frage würde eine teilweise Lösung bieten: http://stackoverflow.com/questions/18858567/mysql-exception-handler-access-excep Behandlung wird behandelt – djechlin

+1

warum 'teilweise'? was fehlt? – rsanchez

Antwort

18

alle SQL-Ausnahmen zu fangen, zu verwenden:

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS kann verwendet werden, um Warnungen auch zu fangen.

Innerhalb der Exception-Handler, die Fehler oder eine Warnung zu erhöhen, die gerade gefangen wurde, zu verwenden:

RESIGNAL 

in der Dokumentation der RESIGNAL Anweisung Siehe:

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

Dieses seit verfügbar ist MySQL 5.5

+1

Das ist genau das, wonach ich suche. Funktioniert wie erwartet! Vielen Dank! –

Verwandte Themen