 |
|
 |
Transacciones
Una transacción es un conjunto de operaciones que se ejecutan en una base de datos, y que son tratadas como una única unidad lógica por el SGBD.
Es decir, una transacción es una o varias sentencias SQL que se ejecutan en una base de datos como una única operación, confirmandose o deshaciendose en grupo.
No todas las operaciones SQL son transaccionales. Sólo son transaccionales las operaciones correspondiente al DML, es decir, sentencias SELECT, INSERT, UPDATE y DELETE
Para confirmar una transacción se utiliza la sentencia COMMIT. Cuando realizamos COMMIT los cambios se escriben en la base de datos.
Para deshacer una transacción se utiliza la sentencia ROLLBACK. Cuando realizamos ROLLBACK se deshacen todas las modificaciones realizadas por la transacción en la base de datos, quedando la base de datos en el mismo estado que antes de iniciarse la transacción.

Un ejemplo clásico de transacción son las transferencias bancarias. Para realizar una transferencia de dinero entre dos cuentas bancarias debemos descontar el dinero de una cuenta, realizar el ingreso en la otra cuenta y grabar las operaciones y movimientos necesarios, actuaizar los saldos ... .Si en alguno de estos puntos se produce un fallo en el sistema podríamos hacer descontado el dinero de una de las cuentas y no haberlo ingresado en la otra. Por lo tanto, todas estas operaciones deben ser correctas o fallar todas. En estos casos, al confirmar la transaccion (COMMIT) o al deshacerla (ROLLBACK) garantizamos que todos los datos quedan en un estado consistente.
En una transacción los datos modificados no son visibles por el resto de usuarios hasta que se confirme la transacción.
El siguiente ejemplo muestra una supuesta transacción bancaria:
DECLARE importe NUMBER; ctaOrigen VARCHAR2(23); ctaDestino VARCHAR2(23); BEGIN importe := 100; ctaOrigen := '2530 10 2000 1234567890'; ctaDestino := '2532 10 2010 0987654321'; UPDATE CUENTAS SET SALDO = SALDO - importe WHERE CUENTA = ctaOrigen; UPDATE CUENTAS SET SALDO = SALDO + importe WHERE CUENTA = ctaDestino; INSERT INTO MOVIMIENTOS (CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO) VALUES (ctaOrigen, ctaDestino, importe*(-1), SYSDATE); INSERT INTO MOVIMIENTOS (CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO) VALUES (ctaDestino,ctaOrigen, importe, SYSDATE); COMMIT; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('Error en la transaccion:'||SQLERRM); dbms_output.put_line('Se deshacen las modificaciones); ROLLBACK; END;
|
Si alguna de las tablas afectadas por la transacción tiene triggers, las operaciones que realiza el trigger están dentro del ambito de la transacción, y son confirmadas o deshechas conjuntamente con la transacción.
Durante la ejecución de una transacción, una segunda transacción no podrá ver los cambios realizados por la primera transacción hasta que esta se confirme.
ORACLE es completamente transaccional. Siempre debemos especificar si que queremos deshacer o confirmar la transacion.
|
| |
 |
duda
por
juan
Respuesta recibida el [04/04/2008 01:11:38]
|
 |
"Durante la ejecución de una transacción, una segunda transacción no podrá ver los cambios realizados por la primera transacción hasta que esta se confirme." Exactamente que quiere decir?gracias PD:enhorabuena por el tutorial
|
| |
 |
respuesta a duda
por
uno
Respuesta recibida el [29/04/2008 05:14:10]
|
 |
yo entendi que: imagina que una transaccion es una secuencia de updates y que en un momento hay un fallo y se han de deshacer los canvios, si una segunda transaccion estaba accediendo a los mismos datos y la primera transaccion los deshace justo despues por el rollback, la segunda transaccion tendra valores incorrectos. Si se espera al commit o rollback,tendran los mismos valores.
|
| |
 |
otra respuesta
por
Arturo Pinochet
Respuesta recibida el [06/05/2008 12:00:58]
|
 |
Creo que era mas bien, por ejemplo, si la primera transaccion comienza en el tiempo 1 y termina en el 10, y la segunda comienza en el tiempo 5 y termina en el 15, la segunda transaccion verá los valores originales, puesto que la primera todavia no los ha modificado (no ha hecho commit)
|
| |
 |
clara explicación
por
Roy
Respuesta recibida el [29/07/2008 04:15:19]
|
 |
Muy clara la explicación, hacen ver este tema sencillo
|
| |
 |
si la transaccion involucra varios PLs
por
villa
Respuesta recibida el [15/10/2008 05:30:40]
|
 |
que pasa si la transaccion involucra varios procedimientos pl/sql.¿hago commit o rollback en el ultimo?...me podrian ayudar
|
| |
 |
Nunca participo en foros pero ...
por
Luc
Respuesta recibida el [07/07/2009 06:32:03]
|
 |
Nunca participo en foros pero voy hacer una excepción para felicitarte por tan buen tutorial, de lo más didáctico que se encuentra en la red.
|
| |
 |
Transaccion con un padre y varios hijos como seria este ejemplo
por
Jorge
Respuesta recibida el [23/07/2009 11:25:41]
|
 |
Dadas 2 tablas
Tabla A: IdPadre,Padre Tabla B: IdHijo,Hijo,IdPadre(FK)
Necesito hacer un procedimiento almacenado q inserte el padre siempre q inserte todos los hijos (Cada padre puede tener 0,1 o mas hijos) Y si falla el insert de algun hijo q realice el Rollback tanto del padre como los hijos insertados. Como seria el procedimiento almacenado?
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Transacciones con PL/SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
38529 |
Fecha de publicación:
20/07/2006 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
109
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
809
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
764
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
669
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3177
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14561
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1497
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
695
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
369
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2034
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |