2012-10-26 9 views
17

Non riesco a trovare da nessuna parte come rilevare e ri-lanciare eventuali errori o avvisi che possono verificarsi in una procedura.Come catturare e ri-lanciare tutti gli errori in MySQL

quello che voglio è la sintassi per effettuare le seguenti operazioni:

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

Il motivo è che voglio per forza un rollback in caso di errore o di avvertimento, ma lasciarlo fino al cliente di decidere cosa fare con l'errore specifico.

Le aree all-cap sono le parti in cui non so cosa mettere.

Grazie per qualsiasi aiuto!

Modifica -------

Da allora ho imparato che non è possibile fare ciò che ho chiesto:. '(

Invece ho un solo errore per tutto ciò che va male e utilizzato il seguente codice:

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

(errore() non esiste)

+0

Questa domanda fornirebbe una soluzione parziale: http://stackoverflow.com/questions/18858567/mysql-exception-handler-access-excep gestione-essere – djechlin

+1

perché 'parziale'? cosa manca? – rsanchez

risposta

18

Per catturare tutte le eccezioni SQL, utilizzare:

DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS può essere utilizzato anche per rilevare le avvertenze.

All'interno del gestore di eccezioni, per aumentare l'errore o di avvertimento che è stato appena catturato, uso:

RESIGNAL 

vedere la documentazione per la dichiarazione RESIGNAL:

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

Questo è disponibile dal MySQL 5.5

+1

Questo è esattamente quello che sto cercando. Funziona come previsto! Grazie! –

Problemi correlati