Transacciones en procedimientos

Uso de una transacción dentro de un procedimiento almacenado

Cómo realizar transacciones con procedimientos almacenados

Uso de START TRANSACTION en la base de datos de proyectos

DELIMITER $$
 
CREATE PROCEDURE transaccion1()
  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 transaccion1();

 

GET DIAGNOSTICS Statement

Obtención de información del error:

DELIMITER $$
 
CREATE OR REPLACE PROCEDURE transaccion2()
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 transaccion2();
SELECT @p1, @p2, @p3, @p4

 

 

Deja una respuesta