Ver Mensaje Individual
  #1  
Antiguo 08-05-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Reputación: 0
elrodrix Va por buen camino
Transaccion en Procedimiento Almacenado

Que tal? Tengo un procedimiento almacenado donde realizo 3 INSERT IMPORTANTES en un solo SP, a traves de una aplicacion en DELPHI utilizando componentes ADO. Queria saber como puedo hacer para que, en caso de realizarce los 3 INSERT CORRECTAMENTES, mysql me envie un msj de EXITO por ej, y lo pueda interceptar en delphi para tirar un mensaje en la aplicacion de EXITO. Y en el caso de algun error (como caida del servidor por ej) que NO me realice ningun INSERT y deshaga todas las operaciones realizadas, y obviamente me envie un msj de ERROR a mi aplicacion asi poder mostrar en DELPHI al usuario que ha ocurrido un error. Lei acerca de transacciones, pero no se bien donde incluirlas en mi codigo. Les dejo mi Codigo SQL

Código SQL [-]
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `acta_alta`(
    in p_actanum int,
    in p_actaserie varchar(2),
    in p_actafecha Date,
    in p_actahora varchar (5),
    in p_offdni int,
    in p_empresaid int,
    in var1 int,
    in var2 int,
    in var3 int,
    in var4 int,
    in var5 int,
    in var6 int,
    in var7 int,
    in var8 int,
    in var9 int,
    in var10 int,
    in p_vehicledom varchar (45),
    in p_lugarid int,
    in p_actanumcalle varchar (45),
    in p_causanum int,
    in p_causafecha date,
    in p_usu int
    
)
BEGIN

/*Primer INSERT datos ACTA*/

    INSERT INTO acta (actanum, actaserie, actafecha, actahora, actanumcalle, offdni, empresa_id, vehicledom, lugar_id, causanum, causafecha)
    VALUES (p_actanum, p_actaserie, p_actafecha, p_actahora, p_actanumcalle, p_offdni, p_empresaid, p_vehicledom, p_lugarid, p_causanum, p_causafecha);

/*Segundo INSERT datos INFRACCION*/

    if var1 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var1);
    end if;
    
    if var2 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var2);
    end if;
    
    if var3 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var3);
    end if;
    
    if var4 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var4);
    end if;
    
    if var5 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var5);
    end if;
    
    if var6 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var6);
    end if;
    
    if var7 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var7);
    end if;
    
    if var8 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var8);
    end if;
    
    if var9 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var9);
    end if;
    
    if var10 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var10);
    end if;
    
/*Tercer INSERT de CAUSA en tabla CAUSA*/

    INSERT INTO causa (causanum, causafecha)
    VALUES (p_causanum, p_causafecha);
    
/*cuarto INSERT para AUDITORIA ACTA*/

    INSERT INTO audit_acta (tipoact, actanum_new, actaserie_new, actafecha_new, actahora_new, usu_id, fecha, hora)
    VALUES ('I', p_actanum, p_actaserie, p_actafecha, p_actahora, p_usu, CURRENT_DATE(), CURRENT_TIME()); 

END

Muchas gracias y saludos
Responder Con Cita