pl sql transactions commit
Obtenga información sobre las transacciones PL SQL con ejemplos de declaraciones COMMIT, ROLLBACK y SAVEPOINTS:
En este artículo, continuaremos con Serie PL / SQL . En el Paquete PL SQL tutorial, hemos aprendido sobre Package, sus ventajas, especificaciones y estructura.
Aquí exploraremos las transacciones PL SQL y sus características. Discutiremos algunas declaraciones PL / SQL como COMMIT, ROLLBACK, SAVEPOINTS, etc., que están relacionadas con transacciones PL SQL.
También aprenderemos sobre las sentencias LOCK TABLe y AUTOCOMMIT en PL SQL.
¡Comencemos con la discusión!
Lo que vas a aprender:
Transacciones PL SQL
Un componente atómico del trabajo en una base de datos que tiene múltiples sentencias SQL se llama transacción. Se denomina atómico porque una vez que los cambios se ven afectados por las sentencias SQL, pueden confirmarse (actualizaciones indefinidas de la base de datos) o deshacerse (deshacer las actualizaciones de la base de datos).
Una instrucción SQL debe confirmarse; de lo contrario, se puede revertir y todas las modificaciones que se suponía que debía hacer la instrucción SQL permanecen deshechas. Si el programa PL / SQL se detiene en medio de la transacción, no hay impacto en la base de datos y se restaura a su estado original.
COMMIT y ROLLBACK se encargan del hecho de que los cambios en la base de datos sean eternos o se deshagan. La instrucción SAVEPOINT apunta a la posición actual en el procesamiento de transacciones.
Iniciar procesamiento de transacciones
Cada transacción tiene un comienzo y una terminación.
Los siguientes incidentes marcan el inicio de una transacción:
- Después de la conexión a la base de datos, se ejecuta la primera instrucción SQL.
- Se ejecuta una nueva instrucción SQL después de que se complete la instrucción SQL anterior.
Finalizar el procesamiento de transacciones
Cada programa PL / SQL debe tener una instrucción COMMIT o ROLLBACK. Depende únicamente de la lógica de programación si debemos usar COMMIT o ROLLBACK después de la transacción.
Si no se utilizan sentencias COMMIT o ROLLBACK, depende del entorno del host cómo debería ser el estado final de la base de datos. Por ejemplo, en un entorno SQL * PLUS, si un bloque de código PL / SQL no tiene una declaración COMMIT o ROLLBACK, el estado de la base de datos dependerá del bloque de código que se ejecute inmediatamente después de eso.
En un entorno de Oracle, si incluimos una declaración COMMIT o ejecutamos el comando DISCONNECT, EXIT o QUIT después de ejecutar una definición de datos o una consulta de control de datos, la transacción se confirma. Además, si incluimos una declaración ROLLBACK, la transacción se deshace.
Por lo tanto, una transacción se puede finalizar debido a cualquiera de los siguientes escenarios:
- Se ejecuta una instrucción ROLLBACK o COMMIT.
- A DDL query ( por ejemplo, se ejecuta una instrucción de creación de tabla), después de lo cual se ejecuta COMMIT de forma predeterminada.
- Una consulta DCL ( por ejemplo, se ejecuta una sentencia GRANT), después de lo cual se ejecuta COMMIT de forma predeterminada.
- El usuario finaliza la conexión a la base de datos.
- El usuario ejecuta la instrucción EXIT para salir de SQL * PLUS, después de lo cual se ejecuta COMMIT de forma predeterminada.
- SQL * PLUS encuentra una terminación inusual, después de lo cual se ejecuta ROLLBACK por defecto.
- Una consulta DML no se ejecuta correctamente, después de lo cual se ejecuta ROLLBACK de forma predeterminada para devolver la base de datos a su estado original.
COMPROMISO para cambios permanentes
La declaración COMMIT es capaz de terminar la transacción actual y hacer una modificación permanente tal como la realiza la transacción. Una vez que se ejecuta COMMIT, podemos hacernos con los datos modificados.
mejor VPN para kodi
A medida que se ejecuta la instrucción COMMIT, todas las filas afectadas de la tabla se liberan de los bloqueos. También nos ayuda a deshacernos del SAVEPOINT. Una instrucción COMMIT puede ir acompañada opcionalmente de la instrucción WORK (COMMIT WORK) que se agrega solo para mejorar la legibilidad del código.
En caso de que una transacción falle en el momento de COMMIT y no se conozca el estado de la transacción, en ese momento el texto COMMENT en el código PL / SQL se almacena en un diccionario de datos junto con la identificación de la transacción.
Sintaxis de la transacción COMMIT:
|_+_|Consideremos una tabla llamada PROFESORES.
Hemos creado la tabla PROFESORES con la ayuda de la declaración SQL que se proporciona a continuación:
|_+_|Inserte valores en esta tabla y luego confirme la transacción de la siguiente manera:
|_+_|A continuación, se ejecuta la siguiente consulta:
|_+_|Producción:
ROLLBACK para deshacer cambios
Si una transacción actual finaliza con una instrucción ROLLBACK, deshará todas las modificaciones que se supone deben tener lugar en la transacción.
Una declaración ROLLBACK tiene las siguientes características que se enumeran a continuación:
- La base de datos se restaura con su estado original con una instrucción ROLLBACK en caso de que hayamos borrado por error una fila importante de la tabla.
- En el caso de una excepción que haya provocado la falla de ejecución de una instrucción SQL, una instrucción ROLLBACK nos permite saltar al punto de inicio del programa desde donde podemos tomar medidas correctivas.
- Las actualizaciones realizadas en la base de datos sin una instrucción COMMIT se pueden revocar con una instrucción ROLLBACK.
Sintaxis de la transacción ROLLBACK:
|_+_|Sintaxis para la transacción ROLLBACK con SAVEPOINT:
|_+_|Aquí el save_n es el nombre del SAVEPOINT.
Consideremos la tabla PROFESORES que hemos creado anteriormente.
Implementación de código con ROLLBACK:
|_+_|A continuación, se ejecuta la siguiente consulta:
|_+_|La salida del código anterior debe ser:
En el código anterior, hemos ejecutado una instrucción DELETE que supuestamente borra el registro del profesor con CODE igual a 3. Sin embargo, debido a la instrucción ROLLBACK, no hay impacto en la base de datos y no se realiza la eliminación.
SAVEPOINT para revertir cambios parciales
SAVEPOINT da nombre e identificación al actual punto de procesamiento de transacciones. Por lo general, está asociado con una instrucción ROLLBACK. Nos permite revertir algunas secciones de una transacción sin tocar toda la transacción.
Cuando aplicamos ROLLBACK a un SAVEPOINT, todos los SAVEPOINTS incluidos después de ese SAVEPOINT en particular se eliminan (es decir, si marcamos tres SAVEPOINTS y aplicamos un ROLLBACK en el segundo SAVEPOINT, automáticamente se eliminará el tercer SAVEPOINT.)
Una instrucción COMMIT o ROLLBACK elimina todos los SAVEPOINTS. Los nombres dados a SAVEPOINT son identificadores no declarados y se pueden volver a aplicar varias veces dentro de una transacción. Hay un movimiento de SAVEPOINT de la posición anterior a la actual dentro de la transacción.
Un ROLLBACK aplicado a un SAVEPOINT afecta solo a la parte en curso de la transacción. Por lo tanto, SAVEPOINT ayuda a dividir una transacción larga en pequeñas secciones colocando puntos de validación.
Sintaxis de la transacción SAVEPOINT:
|_+_|Aquí, save_n es el nombre del SAVEPOINT.
Consideremos nuevamente la tabla PROFESORES que hemos creado anteriormente.
Implementación de código de ROLLBACK WITH SAVEPOINT:
|_+_|A continuación, se ejecuta la siguiente consulta:
|_+_|La salida del código anterior debe ser:
En el código anterior, después de ROLLBACK con SAVEPOINT s se aplica, solo se insertaron dos filas más, es decir, maestros con CÓDIGO 4 y 7, respectivamente. Tenga en cuenta que los profesores con los códigos 1, 2 y 3 se han agregado durante la creación de la tabla.
Tabla LOCK en PL / SQL
La declaración LOCK en PL / SQL permite bloquear la base de datos completa en un modo de bloqueo. Esto determina si queremos compartir o no permitir el acceso a la tabla.
Tomemos un ejemplo de una tabla de bloqueo:
|_+_|La consulta anterior bloquea la tabla PROFESORES en el modo de compartir filas. Un modo de compartir filas otorga permiso para un uso simultáneo de una tabla. No permite a los usuarios bloquear la mesa completa para uso individual. Después de la ejecución de COMMIT o ROLLBACK, se liberan los bloqueos de la tabla. La palabra clave NOWAIT se utiliza para mencionar que la base de datos no puede esperar a que se libere un bloqueo.
El modo de bloqueo es importante para concluir qué otros bloqueos se pueden aplicar a una mesa.
Analicemos algunos modos de BLOQUEO disponibles en PL / SQL:
Sl. No | MODO DE BLOQUEO | OBJETIVO |
---|---|---|
1 | COMPARTIR FILA | Permite que múltiples usuarios utilicen la mesa simultáneamente. Sin embargo, los usuarios no pueden bloquear la tabla completa para uso exclusivo. |
2 | FILA EXCLUSIVA | Permite que múltiples usuarios utilicen la mesa simultáneamente. Sin embargo, los usuarios no pueden bloquear la tabla completa para uso exclusivo en el modo de compartir. |
3 | COMPARTIR ACTUALIZACIÓN | Permite que múltiples usuarios utilicen la mesa simultáneamente. Sin embargo, los usuarios no pueden bloquear la tabla completa para uso exclusivo. |
4 | CUOTA | Nos permite ejecutar múltiples consultas sobre la mesa simultáneamente. Sin embargo, los usuarios no pueden modificar la tabla bloqueada. |
5 | COMPARTIR FILA EXCLUSIVA | Permite a los usuarios con acceso de solo lectura a la tabla. No se les permite modificar la tabla o bloquear la tabla en el modo de compartir. |
6 | EXCLUSIVO | Solo permite ejecutar consultas en la mesa bloqueada. |
Control automático de transacciones en PL / SQL
Podemos hacer la configuración de manera que una instrucción COMMIT se ejecute de forma predeterminada siempre que se ejecute una instrucción INSERT o DELETE. Esto se hace estableciendo la variable de entorno AUTOCOMMIT en ON.
Sintaxis:
|_+_|Nuevamente, esto se puede desactivar haciendo que la variable de entorno AUTOCOMMIT esté en OFF.
Sintaxis:
|_+_|Preguntas y respuestas frecuentes
P # 1) ¿Cuál es la transacción en PL SQL?
Responder: Una transacción es un grupo de declaraciones de cálculo de datos SQL que funcionan como una unidad atómica. Todas las transacciones son de naturaleza atómica, que se comprometen o se restituyen.
P # 2) ¿Qué es COMMIT en PL SQL?
Responder: Una declaración COMMIT se utiliza para realizar un cambio permanente en la base de datos mediante la transacción actual. Hace que la modificación de la base de datos sea visible para los usuarios.
qué sistema operativo Windows es mejor
P # 3) ¿Cómo finaliza una transacción?
Responder: Una transacción termina explícitamente con una instrucción COMMIT o ROLLBACK. También se puede finalizar incondicionalmente después de ejecutar una instrucción DML.
P # 4) ¿Podemos comprometernos en un disparador?
Responder: Sí, podemos comprometernos en el disparador solo si esa transacción disparadora es independiente de su transacción principal.
P # 5) ¿SELECT es una transacción?
Responder: Sí, SELECT es una transacción que tiene todas las características de una transacción.
P # 6) ¿Cómo deshago una transacción en Oracle?
Responder: Necesitamos ejecutar una declaración ROLLBACK para revertir una transacción en Oracle. Deshará todos los cambios realizados por la transacción en la base de datos y se restaurará a su estado original.
Conclusión
En este tutorial, hemos discutido en detalle algunos conceptos básicos de transacciones PL SQL que son esenciales para la gestión de transacciones PL SQL. Hemos cubierto los siguientes temas que se enumeran a continuación:
- Transacción.
- Uso de COMMIT en una transacción.
- ¿Qué es un ROLLBACK en una transacción?
- Uso de ROLLBACK con SAVEPOINT en una transacción.
- Mesa LOCK.
Lectura recomendada
- Tutorial PL SQL para principiantes con ejemplos | ¿Qué es PL / SQL?
- Desarrollo de aplicaciones de base de datos Oracle: Oracle SQL y PL / SQL
- Paquete PL SQL: Tutorial del paquete Oracle PL / SQL con ejemplos
- Diferencia entre SQL Vs MySQL Vs SQL Server (con ejemplos)
- Formato de fecha y hora PL SQL: Funciones de fecha y hora en PL / SQL
- Guía completa para el manejo de excepciones PL SQL con ejemplos
- SQL vs NoSQL diferencias exactas y saber cuándo usar NoSQL y SQL
- Tutorial de Oracle Database: ¿Qué es Oracle Database?