Autor Tema: Procedimientos almacenados y transacciones  (Leído 3024 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Procedimientos almacenados y transacciones
« en: Febrero 04, 2015, 10:46:05 am »
Hola a todos.
No tengo idea de procedimientos almacenados ni de disparadores, pero me veo en la necesidad de empezar a emplearlos, por lo cual estoy comenzndo a leer sobre ellos.
Lo que les quiero consultar en este caso es lo siguiente.
Si trabajo en VB6 con transacciones (bd.BeginTrans, bd.CommitTrans y bd.RollBackTrans) y hago operaciones con la base de datos que, a su vez, hacen que se ejecuten procedimiientos almacenados, ¿estos se ven afectados por dichas transacciones? Es decir, si abro una transacción, hago operaciones y estas desencadenan procedimientos almacenados y luego ejecuto RollBackTrans, ¿lo hecho por los procedimientos almacenados también se deshace (o no se aplica, en realidad)?
Muchas gracias.

Jerónimo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Procedimientos almacenados y transacciones
« Respuesta #1 en: Febrero 04, 2015, 02:23:00 pm »
No te lo puedo afirmar, pero un 99% seguro que es como decís vos, ya que el que maneja la transacción es el motor de base de datos, supongo que una vez que abrís una transacción, todos los INSERT, UPDATE, etc que hagas en la base, son instrucciones que se guardan en  un log, y no le importaría si el INSERT se ejecutó dentro o fuera de un procedimiento.

Si es un SQL server también podes manejar las transacciones directamente dentro de un procedimiento:
BEGIN TRAN
---- tu código
COMMIT TRAN o ROLLBACK TRAN

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Procedimientos almacenados y transacciones
« Respuesta #2 en: Febrero 04, 2015, 04:39:06 pm »
Si es un SQL server también podes manejar las transacciones directamente dentro de un procedimiento:
BEGIN TRAN
---- tu código
COMMIT TRAN o ROLLBACK TRAN
Me hiciste dar cuenta de que no aclaré que trabajo con MySQL.
Por otro lado, si trabajo como el ejemplo que pusiste, ¿no se hace independiente el procedimiento almacenado de lo que haga desde VB? Es decir, si el procedimiento almacenado hace su propia transacción, ¿no queda aislado de lo que hace el VB?
Muchas gracias, Waldo.

Jerónimo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Procedimientos almacenados y transacciones
« Respuesta #3 en: Febrero 04, 2015, 11:36:53 pm »
Doc, cuidado con abrir una transacción dentro de otra transacción.

La cosa es así: Finalizas una transacción con un commit o roollback y para esa transacción, si dentro de ella invocas a un SP o trigger que a su vez llame a otra y luego haces un rollback todo volverá al estado anterior de esa transacción, o sea, la BD volverá a como estaba tu BD justa antes del begintrans. Naturalmente hay que tener cuidado con algunas inconsistencias que se puedan presentar en un entorno de red altamente concurrido. En todo caso esto te lo comento desde la experiencia Firebird pero presumo que no tendría porque ser diferente en otros motores, sino, esta chocando con el ACID empezando por la Atomicidad.

Saludos
« última modificación: Febrero 04, 2015, 11:41:05 pm por YAcosta »
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Procedimientos almacenados y transacciones
« Respuesta #4 en: Febrero 05, 2015, 12:44:10 am »
Puesto así, suena fácil  ;)
Como no tengo en claro muchas cosas de bases de datos, no sabía si los begintrans, committrans y rollbacktrans que pudiera ejecutar desde Visual Basic incluirían los procedimientos almacenados alojados en la base de datos. Ahora entiendo que sí.
Igualmente, me falta leer mucho, porque nunca usé SP ni disparadores.
Muchas gracias, amigo Yván.

Jerónimo