Transacciones en procedimientos
Uso de una transacción dentro de un procedimiento almacenado
Cómo realizar transacciones con procedimientos almacenados
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 ;
Ejecución:
CALL transaccion_en_mysql();
GET DIAGNOSTICS Statement
Obtención de información del error:
DELIMITER $$ CREATE OR REPLACE PROCEDURE transaccion_en_mysql() BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @p1 = MESSAGE_TEXT, @p2 = RETURNED_SQLSTATE, @p3 = MYSQL_ERRNO, @p4 = TABLE_NAME; SELECT 'Ha ocurrido un error: se hace rollback y termina el procedimiento' AS Info, @p1 AS Mensaje, @p2 AS Estado, @p3 AS Número, @p4 AS Tabla; 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 ;
Ejecución:
CALL transaccion_en_mysql();
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.