Uso de TRY-CATCH-COMMIT-ROLLBACK

756 views
Skip to first unread message

Roy Francisco Salas Benavides

unread,
Mar 19, 2013, 11:24:44 PM3/19/13
to publice...@googlegroups.com
Hola amigos del foro. Un Saludo.
Aunque he estado leyendo en el ayuda, no logro comprender muy bien el esquema de funcionalidad de este bifurcación y además me surgen dudas sobre TABLEREVERT() y TABLEUPDATE(), COMMIT y ROLLBACK ¿ cuál, cómo y cuando se debe de usar y por qué ?  Estoy iniciando con MySQL en la Nube, y quiero ir cambiando mis amplicaciones a esta SGBD, porque en los Servidores en la nube solo ofrecen MySQL o PostGreSQL.

Alguien que me de una luz !.  De una pseudo-manera entiendo que es hacer todas las transacciones y si resultan exitosas entonces aplico un COMMIT y sino va un ROLLBACK; pero he ahí la pregunta ¿ como controlo eso ?

Saludos.

Carlos Miguel FARIAS

unread,
Mar 20, 2013, 9:11:47 AM3/20/13
to publice...@googlegroups.com
Tomando como base el título del hilo y lo que preguntas a continuación trato de responder.
1º) TRY CATCH es una construcción del lenguaje de programación (muchos la tienen), no corresponde a el SQL (desconozco si lenguajes de SP de algun SGBD cuenta con él).
2º) Tablerevert y tableupdate en principio son funciones que trabajan con tablas nativas cuando estas se configuran para usar buffers de memoria.
3º) COMMIT y ROLLBACK responde a la caracteristica ACID esperada de cualquier SGBD. estas dos corresponden a instrucciones relacionadas con transacciones en la bd.
Una transacción es una o mas instrucciones SQL que se usan al trabaja con BD.
Una transaccion con tablas nativas solo puede hacerse si estas pertenencen a una bd nativa (o sea, no pueden ser libres).
Comienza con BEGIN TRANSACTION y termina, en el caso de nativas con ROLLBACK o END TRANSACTION (en los SGBD esta generalmente se denomina COMMIT)
Para que sirve? si ejecutas varias operaciones sobre la base de datos, en formato no transaccional, si en alguno de los pasos se produce un error, debes codificar manualmente, restaurar los datos previos, para que la bd quede consistente.
Con una transaccion definida, al cancelar el proceso en algún paso (lo que se hace con ROLLBACK) todas los pasos anteriores son "anulados" y la bd queda como antes de empezar la transacción (antes del BEGIN).
Si todo está bien, ejecutas un END TRANSACTION (o COMMIT) y las modificaciones de todos los pasos de la transacción quedan firmes.
Esto como para ir entendiendo el esquema.
Saludos: Miguel, La Pampa RA

Daniel Sánchez

unread,
Mar 20, 2013, 9:18:46 AM3/20/13
to Comunidad de Visual Foxpro en Español
Hola Francisco, tablerevert() y tableupdate() son comandos de vfp, el primero revierte los cambios realizados en un registro manejando un buffer en registro eso quiere decir que vas haciendo el cambio de los campos del registro, vfp mantiene una copia del registro que se esta cambiando y si por algún motivo me arrepiento de dichos cambios le indicas tablerevert() y los datos que estaba cambiando se anulan y permanecen los datos iniciales, ahora tableupdate() sirve para cuando indique los cambios en los campos del registro pues lo confirmo que quedan y para eso hago tableupdate() fuerza a dejar los nuevos datos permanente en el registro, ahora en los otros comandos son para manejo de transacciones, ejemplo

*/para esto vamos a trabajar con 2 tablas tabla1, tabla2

begin transaction
select tabla1
insert into datosagrabar
if tableupdate()
    */si no hubo problema en la grabación sigo con el siguiente grabacion
    select tabla2
    insert into datosagrabar2
    if tableupdate()
      end transaction   
    else
      rollback
    endif 
else
  rollback
endif 

En este ejemplo si no puedo grabar cualquiera de las 2 tablas se deshace toda las grabaciones, esa es la ventaja de usar transacciones, se graba todo o no se graba nada.

Saludos

   
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú
Reply all
Reply to author
Forward
0 new messages