Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Start transaction

Estas en el tema de Start transaction en el foro de Mysql en Foros del Web. Hola soy nueva utilizando Mysql necesito hacer un Store Procedure con transaccion lo que sigue es el código que arme al querer grabar en la ...
  #1 (permalink)  
Antiguo 14/07/2011, 08:04
 
Fecha de Ingreso: julio-2011
Ubicación: Capital Federal
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Start transaction

Hola soy nueva utilizando Mysql necesito hacer un Store Procedure con transaccion lo que sigue es el código que arme al querer grabar en la interfase que estoy utilizando (Navicat) me da error de sintaxis, además necesito utilizar el ROLLBACK pero no se dónde debo colocar la instrucción, si alguien me puede ayudar se lo agradezco desde ya


START TRANSACTION;
BEGIN
SET autocommit=0;
declare rows int default 0;
SET @tablename1 ='bancaria.msal000_SEC01';
SET @tablename2='bancaria.msal001_SEC01';
SET @elimporte = 100

SET @a =concat('INSERT INTO ',@tablename1 ,' (cod_secc,cod_mon,cod_bco,tip_cta,nro_cta) VALUES (1,1,1,1,77777)');

SET @b =concat('UPDATE ',@tablename2,' SET IMPORTE = IMPORTE + ',elimporte,' WHERE cod_secc=1 and cod_mon =1 and cod_bco =1 and tip_cta=1 and nro_cta =77777')

PREPARE STM3 FROM @a;
EXECUTE STM3;

PREPARE STM4 FROM @b;
EXECUTE STM4;

COMMIT;

SET autocommit=1;
END

Última edición por alemas; 14/07/2011 a las 08:35
  #2 (permalink)  
Antiguo 15/07/2011, 00:36
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Start transaction

Hola alemas, no recuerdo exactamente la sintaxis de los store procedures pero veo que algunas de tus lineas terminan con ; y otras no. Además te recomiendo SQLyog, es libre y mucho más potente como cliente SQL.
Respecto de las transacciones, debes colocar entre BEGIN y COMMIT el código que quieras ejecutar.
La instrucción ROLLBACK se debe ejecutar cada vez que ocurra un error y quieras deshacer los cambios hasta el momento. PUedes tener varios ROLLBACK en u mismo programa.
Espero que te sirva, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 15/07/2011, 13:02
 
Fecha de Ingreso: julio-2011
Ubicación: Capital Federal
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Start transaction

Hola repara2, gracias por tu ayuda, finalmente la solución es esta:


BEGIN
declare salida int default 0;

declare continue handler for SQLEXCEPTION BEGIN
SET salida =1;
END;


START TRANSACTION;
SET @tablename1 ='labase.msal000_SEC01';
SET @tablename2='labase.msal001_SEC01';
SET @elimporte = 100 ;
SET @a =concat('INSERT INTO ',@tablename1 ,' (cod_secc,cod_mon,cod_bco,tip_cta,nro_cta) VALUES (1,1,1,1,77777)');
SET @b =concat('UPDATE ',@tablename2,' SET IMPORTE = IMPORTE + ',@elimporte,' WHERE cod_secc=1 and cod_mon =1 and cod_bco =1 and tip_cta=1 and nro_cta =77777');

PREPARE STM3 FROM @a;
EXECUTE STM3;

PREPARE STM4 FROM @b;
EXECUTE STM4;


IF ( salida =1) THEN
DROP PREPARE stmt3;
DROP PREPARE stm4;
ROLLBACK;
ELSE

DROP PREPARE stmt3;
DROP PREPARE stm4;
COMMIT;
END IF;
END

Etiquetas: sql, start, transacciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.