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

[SOLUCIONADO] Problema con Begin(); Commit();

Estas en el tema de Problema con Begin(); Commit(); en el foro de Mysql en Foros del Web. Muy buenas, Hace casi un año pregunté en este tema , como poder hacer que desde mysql en caso de que se tuvieran que ejecutar ...
  #1 (permalink)  
Antiguo 07/04/2014, 13:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Problema con Begin(); Commit();

Muy buenas,

Hace casi un año pregunté en este tema, como poder hacer que desde mysql en caso de que se tuvieran que ejecutar varias sentencias para poder actualizar varias tablas, en caso de que algún insert, update, etc, fallara, que el resto de transacciones, si se habían llevado a cabo volvieran a su estado anterior.

Se me explicó que haciendo ....

Código MySQL:
Ver original
  1.  SENTENCIA 1;
  2.  SENTENCIA 2;
  3.  ...

... se podría cumplir esa función siempre que las tablas fueran InnoDB.

Cumpliendose ese caso, me da un error el cual si quito simplemente el begin commit, deja crear el procedimiento sin problemas.

Dejo sin desarrollar el procedimiento que quiero crear, dado que como digo, quitando el begin(); commit(); si se crea con éxito.

Código MySQL:
Ver original
  1. CREATE PROCEDURE nomprocedimiento(IN v1 int, IN v2 int)
  2.   DECLARE var1, var2, var3 INT DEFAULT 0;
  3.   SELECT campo1, campo2, campo3
  4.   INTO idsp, xv, xe, xd, xts, xne
  5.   FROM tabla
  6.   WHERE campo1 = v1;
  7.  
  8.  
  9.  BEGIN();
  10.  
  11.   IF var1 > 0 THEN
  12.     INSERT INTO ....;
  13.     UPDATE ....;
  14.     INSERT INTO ...;
  15.   END IF;
  16.  
  17.  COMMIT();

De antemano gracias como siempre
  #2 (permalink)  
Antiguo 07/04/2014, 14:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con Begin(); Commit();

Ni BEGIN ni COMMIT son funciones, sino comandos de bloque, y MySQL no admite bloques anidados.
Lo que corresponde en todo caso es que inicies una transacción.

Suponiendo que vas a cargarlo por medio de la consola de comandos:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE nomprocedimiento(IN v1 int, IN v2 int)
  4.   DECLARE var1, var2, var3 INT DEFAULT 0;
  5.   SELECT campo1, campo2, campo3
  6.   INTO idsp, xv, xe, xd, xts, xne
  7.   FROM tabla
  8.   WHERE campo1 = v1;
  9.  
  10.   IF var1 > 0 THEN
  11.     INSERT INTO ....;
  12.     UPDATE ....;
  13.     INSERT INTO ...;
  14.   END IF;
  15.  
  16. END$$
  17. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/04/2014, 11:45
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema con Begin(); Commit();

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ni BEGIN ni COMMIT son funciones, sino comandos de bloque, y MySQL no admite bloques anidados.
Lo que corresponde en todo caso es que inicies una transacción.

Suponiendo que vas a cargarlo por medio de la consola de comandos:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE nomprocedimiento(IN v1 int, IN v2 int)
  4.   DECLARE var1, var2, var3 INT DEFAULT 0;
  5.   SELECT campo1, campo2, campo3
  6.   INTO idsp, xv, xe, xd, xts, xne
  7.   FROM tabla
  8.   WHERE campo1 = v1;
  9.  
  10.   IF var1 > 0 THEN
  11.     INSERT INTO ....;
  12.     UPDATE ....;
  13.     INSERT INTO ...;
  14.   END IF;
  15.  
  16. END$$
  17. DELIMITER ;
Ahora entiendo porque no encontraba nada como begin commit(); ....
Me confundí con el otro tema que pregunté el año anterior en una respuesta de otro usuario al cual igualmente agradezco la ayuda en dicho momento por supuesto xD.

Pues nada gracias una vez más por tu respuesta que soluciona la duda a la primera.
Saludos

Etiquetas: campo, select, sql, tabla
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 19:28.