You are on page 1of 1

Control de errores en procedimientos almacenados con transacciones en Mysql.

Esto es muy útil cuando tienes procedimientos que llaman a otro procedimiento o a alguna
función de usuario en Mysql. Y que conseguimos? pues que en caso de que algunas de las
consultas o llamadas a otro procedimiento falle podamos deshacer el cambio sin que afecte la
base de datos y además el error se propague por los diferentes niveles de procedimientos. Esto
es gracias a la instrucción RESIGNAL de Mysql.

Sección DECLARE EXIT HANDLER FOR SQLEXCEPTION

Como es normal en mysql la sección empieza con un begin y acaba con end (en vez de parentesis,
el compilador de mysql usa estos delimitadores). Lo que está dentro de este código es lo que se
ejecutará en caso de una excepción de mysql. Nosotros le estamos diciendo que nos muestre el
error y que además haga un rollback de la transacción si es que se ha ejecutado algo. Si
quisieramos lanzar una consulta u otro precedimiento este sería el lugar.

Sección DECLARE EXIT HANDLER FOR SQLWARNING

Es similar al anterior, pero salta cuando hay un warning de sql. Los warnings pueden saltar por
ejemplo al insertar un registro null cuando su campo no le permite etc. Imaginate lo que pasa si
haces update de cientos de registros que dependen de un valor de una variable que vino null o
mal iniciada. desastre.

RESIGNAL. Esto hace que el error se propague a la función o procedimiento que llamó este
procedimiento. Es importante ponerlo, si no lo pones como el error salta en test2 no llegará a
test1 y para test1 no habrá ocurrido ningún error por lo que continuará con su ejecución normal
y ejecutaría el commit de la transacción que en este caso es un simple select pero podria ser un
insert, un update o un delete o cualquier cosa.

START TRANSACTION

Esta instrucción es donde empieza la transacción y va a ejecutar todo el código que hay desde
ahí hasta el commit. Cualquier cosa que se haya modificado dentro de esta estructura si hay
algún error saltará la excepción de Mysql y deshará los cambios.

You might also like