Transacciones en procedimientos
Uso de una transacción dentro de un procedimiento almacenado
Uso de START TRANSACTION
DELIMITER $$ CREATE PROCEDURE transaccion_en_mysql() BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SELECT 'Ha ocurrido un error: se hace rollback y termina el procedimiento' AS Error; END; START TRANSACTION; -- Sentencias SQL en base de datos proyectosDB UPDATE empleado SET salario = 2000 WHERE cdemp = 'B09'; -- UPDATE empleado SET salario = 1000 WHERE cdemp = 'BBB'; INSERT INTO empleado(cdemp, nombre) VALUES ('B09', 'Pepe López'); UPDATE empleado SET salario = salario *1.1 WHERE cdemp = 'B09'; COMMIT; END$$ DELIMITER ;
GET DIAGNOSTICS Statement
Obtención de información del error:
DELIMITER $$ BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @p1 = MESSAGE_TEXT, @p2 = RETURNED_SQLSTATE, @p3 = MYSQL_ERRNO, @p4 = TABLE_NAME; SELECT @p1 AS Mensaje, @p2 AS Estado, @p3 AS Número, @p4 AS Tabla; SELECT 'Ha ocurrido un error: se hace rollback y termina el procedimiento' AS Info; ROLLBACK; END; START TRANSACTION; -- Sentencias SQL en base de datos ProyectosDB UPDATE empleado SET salario = 2000 WHERE cdemp = 'B09'; -- UPDATE empleado SET salario = 1000 WHERE cdemp = 'BBB'; INSERT INTO empleado(cdemp, nombre) VALUES ('B09', 'Pepe López'); UPDATE empleado SET salario = salario *1.1 WHERE cdemp = 'B09'; COMMIT; END DELIMITER ;
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.