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