Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
Manipular datos
Transacción
Cierre
Leer consistencia
Resumen
Ejercicios
Srikanthtechnologies.com
Oracle para principiantes Página : 2
Examinemos ahora varios ejemplos usando el comando ALTER TABLE. Es importante señalar que algunas
posibilidades son aplicables solo cuando se cumplen ciertas condiciones. Estos si y peros deben
recordarse al modificar la estructura de la tabla.
Para agregar una nueva columna CAT (categoría) a la tabla CURSOS, ingrese lo siguiente:
No es posible dar ninguna restricción que no se satisfaga con los datos existentes. Por ejemplo, no es
posible agregar CAT como una columna NOT NULL ya que Oracle inicializa la columna CAT en todas las
filas con valor NULL. Vea la siguiente instantánea de la pantalla.
Srikanthtechnologies.com
Oracle para principiantes Página : 3
Sin embargo, es posible tener una restricción NOT NULL en los siguientes casos:
El siguiente ejemplo funcionará ya que la opción DEFAULT se utiliza para especificar el valor predeterminado.
modificar cursos de tabla agregar (cat varchar2 (5) predeterminado 'prog' no nulo);
Puede agregar una restricción de tabla. Una vez que se crea la tabla, no es posible agregar restricciones que no
sean NOT NULL a las columnas de la tabla. Sin embargo, es posible agregar cualquier restricción a nivel de tabla
de la siguiente manera:
Veremos más sobre funciones como la longitud más adelante en este libro. La restricción anterior
especifica que la columna CAT debe tener al menos dos caracteres. Se agrega como una restricción
de tabla, ya que no es posible agregar la restricción CHECK en el nivel de columna a la columna que
ya existe.
Añadiendo restricción NOT NULL. No se puede agregar ninguna otra restricción a la columna. Sin embargo, es
Srikanthtechnologies.com
Oracle para principiantes Página : 4
Puede disminuir el ancho e incluso cambiar el tipo de datos de la columna si la columna está vacía. Eso
significa que si ninguna fila tiene ningún valor para la columna que se modifica.
Para eliminar una restricción, se requiere el nombre de la restricción. Puede usar la vista
de diccionario de datos USER_CONSTRAINTS para obtener la lista de restricciones.
Opción CASCADE
No puede eliminar una restricción ÚNICA o CLAVE PRIMARIA que sea parte de una restricción de integridad
referencial sin eliminar también la clave externa correspondiente. Para eliminar la restricción PRIMARY KEY o
UNIQUE junto con la restricción REFERENCES, use la opción CASCADE.
Para eliminar la restricción CLAVE PRIMARIA de ESTUDIANTES junto con la restricción relacionada, haga lo siguiente.
Nota: Puede obtener información sobre todas las restricciones utilizando la vista de diccionario de datos
USER_CONSTRAINTS.
O puede eliminar la columna no deseada de inmediato. Todos los datos relacionados con la
columna que se elimina se eliminarán de inmediato.
O puede marcar la columna para eliminarla y eliminarla en una etapa posterior. Dado que la columna
está marcada para descartarse, se considera descartada. Pero los datos de la columna permanecerán
hasta que la columna se elimine físicamente.
Srikanthtechnologies.com
Oracle para principiantes Página : 5
La segunda opción es especialmente útil considerando el hecho de que la caída de una columna lleva
mucho tiempo y si se hace cuando la carga en el sistema es alta, afectará severamente el rendimiento del
sistema. Por lo tanto, puede marcar una columna para soltarla y luego soltarla cuando la carga del
sistema sea baja.
Si la columna que se quita es una CLAVE PRIMARIA o una clave ÚNICA a la que hace referencia una
clave externa, entonces no es posible quitar la columna. Pero es posible si se usa la opción
RESTRICCIONES EN CASCADA. La opción CASCADE CONSTRAINTS elimina todas las restricciones que
dependen de la columna que se elimina.
Para eliminar la columna FCODE de la tabla FACULTY junto con todas las restricciones dependientes, ingrese:
Nota: Cuando suelta una columna ÚNICA o CLAVE PRIMARIA, Oracle descarta automáticamente el índice
que crea para imponer la singularidad.
La opción SET UNUSED del comando ALTER TABLE se usa para marcar una columna para descartarla. Pero la columna no
se elimina físicamente. Sin embargo, la columna se trata como eliminada. Una vez que una columna está marcada como
SIN UTILIZAR, no se puede acceder a ella.
Las columnas que están marcadas para su eliminación se pueden eliminar físicamente usando la opción DROP
UNUSED COLUMNS del comando ALTER TABLE de la siguiente manera:
Nota: Podemos ver la cantidad de columnas que están marcadas para su eliminación usando la vista de diccionario
de datos USER_UNUSED_COL_TABS. USER_TAB_COLUMNS proporciona información sobre las columnas existentes
de una tabla.
Nota: Hasta que una columna se elimine físicamente de la tabla, se cuenta como una columna de la
tabla y se cuenta para el límite absoluto de 1000 columnas por tabla.
Srikanthtechnologies.com
Oracle para principiantes Página : 6
Si la restricción tiene restricciones dependientes, entonces debe usar la cláusula CASCADE para deshabilitar las
restricciones dependientes.
Nota: Puede averiguar el estado de una restricción utilizando la columna ESTADO de la vista del diccionario de datos
USER_CONSTRAINTS.
La cláusula CASCADE CONSTRAINTS se utiliza para eliminar restricciones que hacen referencia a claves
primarias y únicas en la tabla eliminada. Si no proporciona esta cláusula y si existen restricciones de
integridad referencial (restricción de referencias), Oracle muestra el error y no deja caer la tabla.
Srikanthtechnologies.com
Oracle para principiantes Página : 7
Nota: Cuando se elimina una tabla, las Vistas y los Sinónimos basados en la tabla se invalidan, aunque
permanecen en el sistema. También tenga en cuenta que dejar caer una mesa no se puede deshacer.
Manipular datos
Como hemos visto en el primer capítulo, los comandos SQL se dividen en comandos DML y comandos DDL.
Los comandos DDL como CREATE TABLE, ALTER TABLE y DROP TABLE se ocupan de la definición de la tabla
o estructura de la tabla.
Los comandos DML como INSERT, DELETE y UPDATE se utilizan para manipular los datos de la tabla. Ya
hemos visto cómo usar el comando INSERT para insertar filas en la tabla. Ahora veamos otros dos
comandos DML.
Nota: Discutiremos cómo usar la subconsulta en el comando ACTUALIZAR más adelante en este libro.
Srikanthtechnologies.com
Oracle para principiantes Página : 8
ELIMINAR DE mesa
[DONDE condición;]
No es posible eliminar una fila principal mientras tenga filas secundarias. Por ejemplo, no es posible
eliminar una fila de la tabla COURSES si la fila tiene filas dependientes en la tabla BATCHES o en la tabla
COURSE_FACULTY.
Sin embargo, es posible eliminar la fila principal junto con sus filas secundarias, siempre que se proporcione la opción ON
DELETE CASCADE en el momento de crear la restricción de clave externa en la tabla secundaria. Consulte el capítulo 4
para obtener más información.
Los cambios realizados mediante INSERT, UPDATE y DELETE no se hacen permanentes hasta que se confirman explícita o
implícitamente. Consulte la siguiente sección para obtener más información.
Transacción
Una transacción es una colección de declaraciones que se utilizan para realizar una sola tarea. Estas declaraciones
están relacionadas lógicamente ya que realizan una sola tarea. Todas estas declaraciones deben ejecutarse para
completar con éxito la tarea. Si alguna de las declaraciones falla, todas las declaraciones que se ejecutaron antes
de la declaración que falló deben deshacerse; de lo contrario, los datos de la base de datos se vuelven inválidos e
inconsistentes.
Suponga que los profesores con el código kl (Kevin Loney) abandonan el instituto. Entonces, todos sus
lotes deben asignarse a jc (Jason Couchman). Para ello, se deben seguir los siguientes pasos.
Cambie FCODE de todos los lotes que actualmente gestiona kl por jc. Elimina filas de
COURSE_FACULTY donde FCODE es kl.
Srikanthtechnologies.com
Oracle para principiantes Página : 9
Elimina la fila de FACULTAD donde FCODE es kl.
Eso significa que los siguientes son los comandos que se ejecutarán para realizar la tarea mencionada
anteriormente.
Es importante asegurarse de que las tres declaraciones se hayan completado correctamente o de que se hayan
revertido todas. Para garantizar esto, Oracle proporciona un mecanismo de transacción.
Por lo tanto, los comandos COMMIT y ROLLBACK se utilizan para garantizar que todo esté confirmado o
que todo se revierta.
Una transacción es una colección de declaraciones que se deben hacer completamente o no se hacen en
absoluto. En otras palabras, el proceso no debe estar a medias. Eso significa TODO o NADA.
Una transacción comienza cuando finaliza la transacción anterior o cuando comienza la sesión. Una transacción
finaliza cuando se emite COMMIT o ROLLBACK. Ver figura 1.
Una nueva sesión comienza cuando se conecta a Oracle. Por ejemplo, cuando inicia sesión con SQL
* PLUS, inicia una nueva sesión. Cuando sale de SQL * PLUS, la sesión finaliza.
Srikanthtechnologies.com
Oracle para principiantes Página : 10
Figura 1: Una transacción es una colección de comandos entre dos puntos de confirmación.
Comando COMMIT
Se utiliza para confirmar todos los cambios realizados desde el inicio de la transacción. Hace lo
siguiente.
Hace que todos los cambios realizados en la base de datos durante la transacción sean
Finaliza la transacción.
Borra todos los puntos de guardado de la transacción actual (se tratará más adelante).
Los cambios realizados en la base de datos, como insertar filas, eliminar filas y actualizar filas, no se
hacen permanentes hasta que se confirman.
Srikanthtechnologies.com
Oracle para principiantes Página : 11
Compromiso implícito
Oracle implícitamente emite commit en los siguientes casos.
En la desconexión normal de la base de datos. Por ejemplo, cuando sale de SQL * PLUS usando el
comando EXIT.
Nota: Es muy importante recordar no mezclar los comandos DML con el comando DDL, ya que los
comandos posteriores emitirán COMMIT, que también podría cometer cambios incompletos.
Comando ROLLBACK
Se utiliza en el procesamiento de transacciones para deshacer los cambios realizados desde el inicio de la transacción.
Finaliza la transacción.
Borra todos los puntos de guardado de la transacción actual (se tratará más adelante).
SEGMENTO DE ROLLBACK
Para revertir los cambios que se realizaron, Oracle tiene que almacenar los datos que existían antes del
cambio para que los datos anteriores se puedan restaurar cuando el usuario revierte los cambios. EL
SEGMENTO DE ROLLBACK es el área donde Oracle almacena los datos que se utilizarán para revertir los
cambios. Cada transacción está asociada con un SEGMENTO ROLLBACK.
Comando SAVEPOINT
Savepoint se utiliza para marcar una ubicación en la transacción para que podamos retroceder hasta esa
marca y no hasta el comienzo de la transacción.
Srikanthtechnologies.com
Oracle para principiantes Página : 12
Una sola transacción también puede tener varios puntos de guardado. El siguiente ejemplo ilustra cómo utilizar
los puntos de rescate.
En el ejemplo anterior, ROLLBACK TO S1; deshará los cambios realizados desde el punto de guardado S1 hasta el punto
de reversión. Eso significa que deshará INSERT, INSERT e incluso DELETE dado después del segundo punto de guardado.
No deshace la ACTUALIZACIÓN dada antes del primer punto de guardado. El COMMIT dado después de la última
ACTUALIZACIÓN va a confirmar la primera UDPATE y la última ACTUALIZACIÓN. Porque todos los restantes ya se han
revertido mediante el comando ROLLBACK TO S1.
Si hemos dado ROLLBACK TO S2; entonces se habría deshecho solo DELETE dado después de que el segundo
punto de guardado y las declaraciones restantes (actualización, inserción, inserción y actualización) se hubieran
comprometido.
Cierre
Es importante desde el punto de vista del sistema de gestión de bases de datos asegurarse de que dos usuarios
no modifiquen los mismos datos al mismo tiempo de forma destructiva.
Consideremos el siguiente ejemplo para comprender qué sucederá si dos usuarios intentan actualizar
los mismos datos al mismo tiempo.
Supongamos que tenemos una tabla de PRODUCTOS con detalles de los productos. Cada producto tiene
una cantidad disponible (QOH). Transacciones como ventas y compras modificarán la columna QOH de la
tabla.
Los siguientes son los pasos que pueden tener lugar cuando se realizan dos transacciones, una venta y
una compra.
Srikanthtechnologies.com
Oracle para principiantes Página : 13
2. A las 10:00, el USUARIO1 vendió 5 unidades y actualizó la QOH de la siguiente manera, pero no comprometió el
3. A las 10:11, el USUARIO2 compró 10 unidades y actualizó la QOH de la siguiente manera y se comprometió. Después
4. Si a las 10:12 USER1 ha revertido la ACTUALIZACIÓN, entonces los datos que estaban allí antes de la ACTUALIZACIÓN
deben restaurarse, es decir, 20. Pero los datos reales deberían ser 30, ya que le agregamos 10 unidades a las 10:11 y
nos comprometimos.
Como puede ver en el ejemplo anterior, si dos usuarios intentan actualizar la misma fila al mismo
tiempo, los datos pueden estar dañados. Como se muestra en el ejemplo anterior al final del proceso,
QOH debería ser en realidad 30, pero no solo 20.
Es posible asegurarse de que dos transacciones interfieran entre sí bloqueando las filas que se están
modificando para que solo una transacción a la vez pueda realizar el cambio.
Oracle garantiza que solo una transacción pueda modificar una fila a la vez bloqueando la fila una vez
que se actualiza. El bloqueo permanecerá hasta que se complete la transacción.
Oracle también asegura que otros usuarios no verán los cambios que no están comprometidos. Eso
significa que si la transacción T1 ha actualizado una fila, hasta que se confirme la transacción, ninguna otra
transacción en el sistema verá los cambios realizados por T1. En cambio, otras transacciones solo verán los
datos que existían antes de que se realizara el cambio.
2. La transacción T1 ha emitido el comando UPDATE para actualizar la QOH del producto 10. Oracle bloquea
la fila que se actualiza y no permite que otras transacciones actualicen la fila. Sin embargo, es posible
leer los datos de la fila.
Srikanthtechnologies.com
Oracle para principiantes Página : 14
3. Si T1 ha emitido SELECT para recuperar datos, obtendrá 25 en QOH del producto 10.
4. Si T2 ha emitido el comando SELECT, verá solo 20 en QOH del producto 10. Esto se debe a que
no habrá cambios no confirmados disponibles para otras transacciones.
5. Si T2 está intentando actualizar el producto 10, Oracle hará que la transacción T2 espere hasta que se
complete la transacción T1 (que mantiene el bloqueo en esta fila). Oracle lamentará que el bloqueo se
libere indefinidamente.
6. Si se confirma la transacción T1, el cambio se hace permanente y se libera el bloqueo. Ahora es posible
que otras transacciones vean los datos actualizados e incluso actualicen la fila si es necesario.
Los siguientes son los puntos importantes que se deben recordar sobre el mecanismo de bloqueo de
Oracle.
El bloqueo en Oracle es automático y transparente. Eso significa que nunca necesitamos pedirle a Oracle
que bloquee la fila que se está modificando. El bloqueo es transparente significa que el usuario no conoce
Oracle bloquea la fila que se actualiza. Eso significa que el bloqueo es a nivel de fila. Otros niveles que se
Oracle libera los bloqueos retenidos por una transacción cuando la transacción se
completa con éxito, usando COMMIT, o sin éxito, usando ROLLBACK.
Si una transacción está intentando actualizar una fila y si la fila ya está bloqueada, Oracle esperará a que la
fila bloqueada se desbloquee indefinidamente. Se debe al hecho de que las filas se bloquean durante un
período breve en un sistema de producción típico. Por eso, Oracle prefiere esperar a que se produzca algún
error.
Bloquear las filas que se actualizan es una parte importante de Oracle. Garantiza que no haya dos transacciones
que puedan actualizar la misma fila al mismo tiempo. Todos los sistemas de gestión de bases de datos siguen el
mecanismo de bloqueo. Pero algunos sistemas de administración de bases de datos más pequeños siguen el
bloqueo a nivel de página donde no se bloquea la fila exacta que se está modificando, sino que se bloquea toda la
página en la que existe la fila.
Srikanthtechnologies.com
Oracle para principiantes Página : 15
Leer consistencia
Cuando un usuario intenta leer datos mientras otro usuario los actualiza, es posible que nos encontremos
con un escenario en el que el escritor ya haya modificado los datos que debe leer el lector. En tales casos,
Oracle proporciona consistencia de lectura al lector.
La coherencia de lectura garantiza que todo lo que lea un usuario sea coherente hasta el punto de iniciar
la consulta. El siguiente ejemplo ilustrará este mecanismo.
USER1 ha emitido una consulta para leer datos de la tabla SALES a las 10:00. La tabla contiene 20000 filas y
puede llevar 4 minutos recuperar los datos por completo. Como el usuario solo está leyendo los datos, no se
USER2 ha actualizado una fila que está en 15000th fila en la tabla a las 10:01 y confirmó el cambio.
USER1 ha llegado a 15000th fila a las 10:03. Ahora USER1 obtiene los datos que estaban antes del cambio, ya
que cuando comenzó la consulta, el cambio no se llevó a cabo. Eso significa que Oracle tiene que
proporcionar los datos al USUARIO1 que existían en el momento de iniciar la consulta, a las 10:00. Cualquier
cambio, ya sea confirmado o no realizado después de las 10:00, no debe ser recuperado por USER1.
Oracle usa ROLLBACK SEGMENT para almacenar los datos que estaban antes del cambio para proporcionar consistencia
de lectura.
Resumen
El comando ALTER TABLE se utiliza para alterar la estructura de la tabla. Es posible agregar columnas o
restricciones, modificar atributos como el tipo de datos y la longitud de las columnas existentes y eliminar
columnas o restricciones.
Los comandos UPDATE y DELETE se utilizan para actualizar y eliminar filas de la tabla respectivamente. Los
cambios realizados usando comandos DML no se confirman hasta que se confirman explícitamente (usando el
comando COMMIT) o implícitamente. El comando ROLLBACK se usa para revertir los cambios desde el comienzo
de la transacción, que es una colección de declaraciones para realizar una sola tarea. El comando SAVEPOINT se
utiliza para marcar un punto en la transacción de modo que los cambios realizados después del punto de
guardado puedan revertirse.
Oracle bloquea las filas que se actualizan para garantizar que solo una transacción pueda actualizar una fila a la
vez. Oracle también garantiza que los datos recuperados por consulta sean coherentes hasta el punto de iniciar
la consulta: coherencia de lectura.
Srikanthtechnologies.com
Oracle para principiantes Página : dieciséis
Ejercicios
1. ¿Cómo se agrega una restricción de verificación a una columna existente?
Srikanthtechnologies.com