41

CLASE 8 Lenguaje de Manipulacion de Datos

Embed Size (px)

Citation preview

Page 1: CLASE 8 Lenguaje de Manipulacion de Datos
Page 2: CLASE 8 Lenguaje de Manipulacion de Datos

Lenguaje de manipulación de datos

El lenguaje de manipulación de datos (DML) es una parte central de SQL. Cuando necesite agregar,

actualizar o eliminar un dato en la base de datos, se ejecuta una sentencia DML. Una colección de

sentencias DML que forman una unidad lógica de trabajo es llamada transacción.

Considere una base de datos de un banco. Cuando un cliente del banco transfiere dinero desde

una cuenta de ahorros a una cuenta de cheques, la transacción puede consistir de tres

operaciones separadas: reducir los ahorros de la cuenta de ahorros, incrementar la cuenta de

cheques y registrar la transacción en un registro de transacciones.

El servidor Oracle debe garantizar que todas las tres sentencias SQL son realizadas para mantener

las cuentas en el balance adecuado. Cuando algo evita que una de las sentencias en la transacción

pueda ejecutarse, las otras transacciones deben ser desechadas.

Page 3: CLASE 8 Lenguaje de Manipulacion de Datos

Agregando un nuevo registró a una tabla

La grafica de la presentación ilustra la adición de un nuevo departamento a la tabla DEPARTMENTS

Page 4: CLASE 8 Lenguaje de Manipulacion de Datos

Sintaxis sentencia INSERT

Puede adicionar nuevos registros a una tabla usando la sentencia INSERT

En la sintaxis

table Es el nombre de la tabla

column Es el nombre de la columna en la tabla a llenar

value Es el valor correspondiente para la columna

Nota: esta sentencia con la cláusula VALUES adiciona solo una fila a la vez a la tabla.

Page 5: CLASE 8 Lenguaje de Manipulacion de Datos

Insertando nuevas filas

Debido a que puede insertar una nueva fila que contiene valores para cada columna, la lista de

columnas no es obligatoria en una clausula INSERT. Sin embargo, si no usa la lista de columnas, los

valores deben ser listados de acuerdo al orden por defecto de las columnas de la tabla, y un valor

debe ser provisto por cada columna.

Por claridad, use la lista de columnas en la cláusula INSERT.

Encierre caracteres y valores fechas entre comillas simples; sin embargo, no es recomendable que

encierre entre comillas simples valores numéricos.

Page 6: CLASE 8 Lenguaje de Manipulacion de Datos

Insertando filas con valores nulos

Método Descripción

Implícito Omita la columna del listado de columnas

Explicito Especifique la palabra clave NULL en la lista VALUES; Especifique la cadena vacia(‘’) en la lista VALUES para cadenas de caracteres y fechas.

Asegúrese de poder usar valores nulos para la columna destino verificando la columna con el

comando DESCRIBE.

El servidor Oracle automáticamente hace cumplir todos los tipos de datos, rangos de datos, y

restricciones de integridad de datos.

Cualquier columna que no es listada explícitamente obtiene un valor nulo en la nueva fila.

Errores comunes que pueden ocurrir durante el ingreso de datos por el usuario son listados en el

siguiente orden:

Valores obligatorios faltantes para una columna NOT NULL.

Valores duplicados violando cualquier restricción de llave primaria o única.

Algún valor violando la restricción de chequeo (CHECK)

Integridad referencial mantenida por restricciones de llave foránea

Page 7: CLASE 8 Lenguaje de Manipulacion de Datos

Tipos de datos no equivalentes o valores muy grandes para llenar una columna

Nota: El uso de la lista de columnas es recomendable ya que hace la sentencia INSERT mas legible

y segura o menos propensa a errores.

Page 8: CLASE 8 Lenguaje de Manipulacion de Datos

Insertando Valores especiales

Puede usar funciones para insertar valores especiales a una tabla.

En el ejemplo de la presentación se registra información para un empleado Popp en la tabla

empleado. Se obtiene la fecha y hora actual en la columna HIRE_DATE. Se usa la función SYSDATE

que retorna y la fecha y hora actual en el servidor de base de datos. Puede usar también la función

CURRENT_DATE para obtener la fecha actual en la sección de zona de tiempo. Puede usar también

la función USER cuando inserta filas en la tabla. La función USER registra el nombre de usuario

actual.

Page 9: CLASE 8 Lenguaje de Manipulacion de Datos

Insertando fechas específicas y valores de tiempo

El formato DD-MON-RR es generalmente utilizado para insertar un valor fecha. Con el formato RR,

el sistema brinda la centuria correcta automáticamente.

Puede de igual forma proveer una fecha en el formato DD-MON-YYYY. Este es recomendado

porque claramente especifica la centuria y no depende del formato lógico interno RR para

especificar la centuria.

Si la fecha necesita ser ingresada en un formato diferente al definido por defecto (por ejemplo,

con otra centuria o un tiempo específico), debe usar la función TO_DATE

El ejemplo en la presentación registra información para el empleado Raphealy en la tabla

EMPLOYEES. Se ingresa el valor feb 3, 1999 para la columna HIRE_DATE.

Page 10: CLASE 8 Lenguaje de Manipulacion de Datos

Creando un Script

Puede grabar comandos con variables de sustitución en un archivo y ejecutar los comandos en el

archivo. El ejemplo de la presentación registra información para un departamento de la tabla

DEPARTMENTS.

Al Correr el archivo de script inmediatamente se le pregunta por el valor de cada variable de

sustitución. Después de entrar el valor de la variable de sustitución debe presionar el botón Ok.

Los valores entonces ingresados son sustituidos en la sentencia. Esto permite correr el mismo

script una y otra vez pero proveyendo valores diferentes cada vez que se ejecuta.

Page 11: CLASE 8 Lenguaje de Manipulacion de Datos

Copiando filas de otra tabla

Puede usar la sentencia INSERT para agregar filas con datos provenientes de datos en tablas

existentes. En el ejemplo de la presentación para que la sentencia INSERT INTO funcione, debe

haber creado la tabla sales_reps usando la sentencia CREATE TABLE.

En lugar de la cláusula VALUES usa una subconsulta.

Sintaxis

INSERT INTO Tabla [Columna1 (, Columna2)] Subconsulta;

En la sintaxis:

Tabla es el nombre de la tabla

Columna es el nombre de la columna en la tabla a poblar

Subconsulta es la subconsulta que retorna filas a la tabla

El número de columnas y sus tipos de datos en la lista de columnas de la sentencia INSERT debe

concordar con el número de valores y sus tipos de datos en la subconsulta. Cero o más filas son

adicionadas dependiendo del número de filas retornadas por la subconsulta. Para crear una copia

de las filas de una tabla, use SELECT * en la subconsulta.

Page 12: CLASE 8 Lenguaje de Manipulacion de Datos

Cambiando datos en una tabla

La presentación ilustra cambios en el número de departamento para empleados en el

departamento 60 al departamento 80

Page 13: CLASE 8 Lenguaje de Manipulacion de Datos

Sintaxis de la sentencia UPDATE

Puede modificar los valores existentes en una tabla usando la sentencia UPDATE.

En la sintaxis:

Table es el nombre de la tabla

Column es el nombre de la columna en la tabla a poblar

Value es el valor correspondiente o subconsulta para la columna

Condicion Identifica las filas a ser actualizadas y está compuesta de nombres de

columna, expresiones, constantes, subconsultas y operadores de

comparación

Confirme la operación de actualización por una consulta que muestre los registros de la tabla

actualizados.

Nota: en general, use la columna de llave primaria en la cláusula WHERE para identificar una única

fila para actualizar. Usando otras columnas puede de manera inesperada causar varias filas

actualizadas. Por ejemplo, identificando una fila única en la tabla EMPLOYEES por el nombre es

peligroso, porque más de un empleado podría tener el mismo nombre.

Page 14: CLASE 8 Lenguaje de Manipulacion de Datos

Actualizando filas en una tabla

La sentencia UPDATE modifica los valores de una fila específica o filas específicas si la cláusula

WHERE es especificada. El ejemplo en la presentación muestra la transferencia del empleado

113(popp) al departamento 50.

Si omite la cláusula WHERE, los valores de todas las filas de la tabla son modificados.

Page 15: CLASE 8 Lenguaje de Manipulacion de Datos

Actualizando dos columnas con una subconsulta

Puede actualizar múltiples columnas en la cláusula SET de una sentencia UPDATE escribiendo

múltiples subconsultas. La sintaxis es como la siguiente

UPDATE tabla

SET columna1 = (SELECT columna FROM tabla WHERE condicion)

,

Columna2 = (SELECT columna FROM table WHERE condicion)

El ejemplo de la presentación pudo haber escrito también de la siguiente forma;

UPDATE employees

SET (job_id,salary) = (SELECT job_id, salary FROM employees WHERE employee_id=205)

WHERE employee_id = 113;

Page 16: CLASE 8 Lenguaje de Manipulacion de Datos

Actualizando filas basadas en otra tabla

Puede usar subconsultas en la sentencia UPDATE para actualizar valores en una tabla. El ejemplo

en la presentación actualiza la tabla COPY_EMP basándose en los valores de la tabla EMPLOYEES.

Cambian el número de departamento de todos los empleados cuyo job_id es igual al del empleado

200 al número de departamento actual del empleado de código 100.

Page 17: CLASE 8 Lenguaje de Manipulacion de Datos

Eliminando una fila de una tabla

El departamento “Contracting” ha sido eliminado de la tabla DEPARTMENTS (asumiendo que no se

han violado restricciones en la tabla DEPARTMENTS), como se muestra en la gráfica de la

diapositiva.

Page 18: CLASE 8 Lenguaje de Manipulacion de Datos

Sintaxis sentencia DELETE

Puede eliminar filas existentes de una tabla usando la sentencia DELETE.

En la sintaxis:

Table Es el nombre de la tabla

Condition Identifica las filas a ser eliminadas y está compuesta de nombres de

columnas, expresiones, constantes, subconsultas y operadores de

comparación

Nota: Si ninguna fila es eliminada, el mensaje “0 filas eliminadas” es retornado.

Page 19: CLASE 8 Lenguaje de Manipulacion de Datos

Eliminado filas de una tabla

Puede eliminar filas específicas estableciendo la cláusula WHERE en la sentencia DELETE. El primer

ejemplo de la diapositiva elimina el departamento Accounting de la tabla DEPARTMENTS. Puede

confirmar la operación de eliminación desplegando las filas eliminadas usando una sentencia

SELECT.

SELECT * FROM departments WHERE department_name=’Finance’;

Sin embargo, si omite la cláusula WHERE, todas las filas en la tabla son eliminadas. El segundo

ejemplo en la diapositiva elimina todas las filas de la tabla COPY_EMP, porque no hay clausula

WHERE especificada.

Ejemplos:

Page 20: CLASE 8 Lenguaje de Manipulacion de Datos

Eliminando filas basándose en otras tablas

Puede usar subconsultas para eliminar filas de una tabla basándose en valores de otra tabla. El

ejemplo en la diapositiva elimina todos los empleados en un departamento, donde el nombre del

departamento contiene la palabra Public.

La subconsulta explora la tabla DEPARTMENTS encontrando el código del departamento

basándose en que el nombre del departamento contenga la palabra Public. La subconsulta

entonces llena el número de departamento para la consulta principal, la cual elimina filas de la

tabla EMPLOYEES basándose en este número de departamento.

Page 21: CLASE 8 Lenguaje de Manipulacion de Datos

Sentencia TRUNCATE

Un método más eficiente de vaciado de una tabla es usando la sentencia TRUNCATE.

Puede usar la sentencia TRUNCATE para rápidamente eliminar todas las filas de una tabla o grupo.

Eliminar filas con la sentencia TRUNCATE es más rápido que hacerlo con la sentencia DELETE por

las siguientes razones:

La sentencia TRUNCATE es una sentencia del lenguaje de definición de datos (DDL) y no

genera información de rollback.

Truncando una tabla no se disparan los triggers de eliminación de la tabla

Si la tabla es parte de una restricción de integridad referencial, no podrá truncar la tabla. Necesita

deshabilitar la restricción antes de emitir la sentencia TRUNCATE.

Page 22: CLASE 8 Lenguaje de Manipulacion de Datos

Transacciones de bases de datos

El servidor Oracle asegura la consistencia de los datos basándose en transacciones. Las

transacciones dan más flexibilidad y control cuando se cambian los datos, y aseguran la

consistencia de los datos en eventos de fallos de procesos de usuario o fallos del sistema.

Las transacciones constan de sentencias DML que constituyen un cambio consistente de datos. Por

ejemplo, una transferencia de fondos entre dos cuentas debe incluir el débito en una cuenta y

crédito a otra cuenta por la misma cantidad. Ambas acciones deben fallar en conjunto o

completarse en conjunto.

Tipos de transacciones:

Tipo Descripción

Lenguaje de manipulación de datos (DML)

Consiste en cualquier número de sentencias DML que el servidor Oracle puede tratar como una única entidad o unidad lógica de trabajo

Lenguaje de definición de datos (DDL) Consiste en solo una sentencia DDL

Lenguaje de control de datos (DCL) Consiste en solo una sentencia DCL

Page 23: CLASE 8 Lenguaje de Manipulacion de Datos

Transacciones de Bases de datos; Inicio y Fin

¿Cuándo una transacción inicia y finaliza?

Una transacción inicia cuando la primera sentencia DML es encontrada y finaliza cuando uno de

los siguientes eventos ocurre:

Una sentencia COMMIT o ROLLBACK es emitida

Una sentencia DDL, tal como CREATE es omitida

Una sentencia DCL es omitida

El usuario se sale de SQL Developer o SQL *Plus

La máquina falla o el sistema se cae

Después que una transacción termina, la próxima sentencia SQL automáticamente inicia la

siguiente transacción.

Una sentencia DDL o una sentencia DCL es automáticamente confirmada y por lo tanto

implícitamente termina la transacción.

Page 24: CLASE 8 Lenguaje de Manipulacion de Datos

Ventajas de las sentencias COMMIT y ROLLBACK

Con las sentencias COMMIT y ROLLBACK, puede controlar el hacer en los cambios de manera

permanente.

Page 25: CLASE 8 Lenguaje de Manipulacion de Datos

Sentencias del control explícito de transacciones

Puede controlar la lógica de las transacciones usando las sentencias COMMIT, ROLLBACK y

SAVEPOINT.

Sentencia Descripción

COMMIT Termina la transacción actual haciendo todos los cambios pendientes permanentes

SAVEPOINT name Marca un punto de retorno para la transacción actual

ROLLBACK ROLLBACK termina la transacción actual descartando todos los cambios pendientes

ROLLBACK TO SAVEPOINT name ROLLBACK TO SAVEPOINT hace retroceder la transacción actual a un punto específico de retorno, así descartando cualquier cambio o punto de retorno que fueron creados después del punto de retorno al cual estamos regresando. Si omite la cláusula TO SAVEPOINT, la sentencia ROLLBACK retrocede la transacción entera. Como los puntos de retornos son lógicos, no hay forma de listar los puntos de retornos creados.

Nota: no puede hacer COMMIT a un SAVEPOINT, el SAVEPOINT no es del estándar ANSI SQL

Page 26: CLASE 8 Lenguaje de Manipulacion de Datos

Retrocediendo cambios hasta una marca

Puede crear marcas en la transacción actual usando la sentencia SAVEPOINT, la cual divide la

transacción en pequeñas secciones. Puede entonces descartar cambios pendientes hasta una

marca usando la sentencia ROLLBACK TO SAVEPOINT.

Note, que si crea un segundo punto de retorno con el mismo nombre de un punto de retorno

previo, el punto de retorno previo es eliminado.

Page 27: CLASE 8 Lenguaje de Manipulacion de Datos

Proceso implícito de transacciones

Estado Circunstancia

Commit automático Una sentencia DDL o DCL es realizada SQL Developer o SQL *Plus sale normalmente, sin usar explícitamente los comando COMMIT ni ROLLBACK

Rollback automático Terminación anormal de SQL Developer o SQL *Plus o falla del sistema

Nota: En SQL *Plus, el comando AUTOCOMMIT puede ser fijada ON u OFF. Si es fijada ON, cada

sentencia individual DML es confirmada tan pronto como es ejecutada. No puede deshacer los

cambios. Si es fijada en OFF, la sentencia COMMIT puede aún ser usada de manera explícita.

También, la sentencia COMMIT es expedida cuando una sentencia DDL es emitida o cuando se

sale de SQL *Plus. El comando SET AUTOCOMMIT ON/OFF es saltada en SQL Developer. Un DML

es confirmado en una salida normal de SQL Developer solo si tiene habilitada la preferencia

AUTOCOMMIT. Para habilitar el AUTOCOMMIT, desarrolle lo siguiente:

En el menú Tools, seleccione Preferences. En el cuadro de dialogo de Preferences,

expanda Database y seleccione Worksheet Parameters.

El panel derecho, chequee la opción Autocommit in SQL Worksheet.

Page 28: CLASE 8 Lenguaje de Manipulacion de Datos

Fallas del sistema

Cuando una transacción es interrumpida por una falla del sistema, la transacción entera es

automáticamente descartada. Esto previene que el error cause cambios no deseados a los datos y

retorna las tablas al estado anterior al último COMMIT. De este modo, el servidor Oracle protege

la integridad de las tablas.

En SQL Developer, una salida normal de la sesión es cumplida seleccionando EXIT desde el menú

FILE. En SQL *Plus, una salida normal es cumplida entrando el comando EXIT en la línea de

comandos.

Cerrar la ventana es considerada como una salida anormal.

Page 29: CLASE 8 Lenguaje de Manipulacion de Datos

Estado de los datos antes de un COMMIT o ROLLBACK

Cada cambio de dato hecho durante una transacción es temporal hasta que la transacción es

confirmada.

El estado de los datos antes de las sentencias COMMIT y ROLLBACK puede ser descrito de la

siguiente forma:

Operaciones de manipulación de datos afectan primeramente el buffer de la base de

datos; por lo tanto, el estado previo de los datos puede ser recuperado.

El usuario actual puede revisar los resultados de operaciones de manipulación de datos

consultando las tablas

Otros usuarios no pueden ver los resultados de operaciones de manipulación de datos

realizados por el usuario actual.

Las filas afectadas son bloqueadas

Page 30: CLASE 8 Lenguaje de Manipulacion de Datos

Estado de los datos después de un COMMIT

Haga todos los cambios pendientes permanentes usando la sentencia COMMIT. Aquí esta lo que

pasa después de una sentencia COMMIT:

Cambios de los datos son escritos a la base de datos

El estado previo de los datos no están más disponibles con sentencias SQL normales

Todos los usuarios pueden ver los resultados de la transacción

Los bloqueos en las filas afectadas es liberado; Las filas están ahora disponibles para que

otros usuarios puedan realizar nuevos cambios

Todo los puntos de retorno son eliminados

Page 31: CLASE 8 Lenguaje de Manipulacion de Datos

Confirmando datos

En el ejemplo de la diapositiva, una fila es eliminada de la tabla EMPLOYEES y una nueva fila es

insertada en la tabla DEPARTMENTS. Los cambios son grabados usando la sentencia COMMIT.

Ejemplo:

Eliminar los departamentos 209 y 300 en la tabla DEPARTMENTS y actualizar una fila en la tabla

EMPLOYEES. Almacenar los cambios.

Page 32: CLASE 8 Lenguaje de Manipulacion de Datos

Estado de los datos después de un ROLLBACK

Descarte todos los cambios pendientes usando la sentencia ROLLBACK, la cual resulta en lo

siguiente;

Los cambios de datos son deshechos

El estado previo de los datos es restaurado

Bloqueos en las filas afectadas son liberados.

Page 33: CLASE 8 Lenguaje de Manipulacion de Datos

Estado delos datos después de un ROLLBACK: ejemplo

Mientras intenta eliminar un registro de la tabla TEST, puede accidentalmente vaciar la tabla.

Sin embargo, puede corregir el error reeditando una sentencia apropiada, y hacer los cambios de

los datos permanentes.

Page 34: CLASE 8 Lenguaje de Manipulacion de Datos

Nivel – Sentencia Rollback

Una parte de la transacción puede ser descartada mediante un rollback implícito si un error de

ejecución de sentencia es detectado. Si una única sentencia DML falla durante la ejecución de la

transacción, sus efectos son deshechos por un statement – level rollback, pero los cambios

realizados por las sentencias DML previas en la transacción no son descartadas. Ellas pueden ser

confirmadas o deshechas explícitamente por el usuario.

El servidor Oracle emite un Commit implícito antes y después de cualquier sentencia DDL. Incluso

si su sentencia DDL no se ejecuta satisfactoriamente, no puede deshacer las sentencias previas

porque el servidor emitió un commit.

Termine sus transacciones explícitamente ejecutando una sentencia COMMIT o ROLLBACK

Page 35: CLASE 8 Lenguaje de Manipulacion de Datos

Lectura Consistente

Usuarios de la base de datos acceden a ella de dos formas:

Operaciones de lectura (sentencias SELECT)

Operaciones de escritura (Sentencias INSERT, UPDATE y DELETE)

Usted necesita leer consistentemente de manera que ocurra lo siguiente:

El lector y escritor de la base de datos tienen asegurados una vista consistente de los

datos

Lectores no ven datos que están en proceso de ser modificados

Escritores tienen asegurado que los cambios a la base de datos se realizan de una manera

consistente

Cambios hechos por un escritor no desordenan ni entran en conflicto con cambios

realizados por otro escritor.

El propósito de la lectura consistente es asegurar que cada usuario vea los datos tal y como existen

en la última operación de confirmación, antes de que una operación DML inicie.

Nota: El mismo usuario puede iniciar varias sesiones. Cada sesión tendrá consistencia de lectura

en la forma descrita anteriormente, incluso si es el mismo usuario.

Page 36: CLASE 8 Lenguaje de Manipulacion de Datos

Implementación de lectura consistente

Lectura consistente es una implementación automática. Conserva una copia parcial de la base de

datos en los segmentos de rehacer. La imagen de lectura consistente es construida de los datos

confirmados de la tabla y los datos viejos de la tabla que están siendo modificados y que aún no

han sido confirmados desde el segmento de rehacer.

Cuando una operación INSERT, UPDATE o DELETE es echa en la base de datos, el servidor Oracle

toma de los datos antes de que sean modificados y la escribe en el segmento de rehacer.

Todos los lectores, excepto el que realiza el cambio, ve la base de datos como estaba antes de que

los cambios iniciaran; ellos ven una fotografía de lo que está en el segmento de rehacer.

Antes que los cambios son confirmados en la base de datos, solamente el usuario que realiza los

cambios ve la base de datos con las alteraciones. Todos los demás ven la fotografía del segmento

de rehacer. Esto garantiza a los lectores la lectura consistente de los datos que no está

actualmente sometida a cambios.

Cuando una sentencia DML es confirmada, los cambios realizados a la base de datos se vuelven

visibles a cada uno usando una sentencia SELECT después que la confirmación se ha realizado. El

espacio ocupado por los viejos datos del archivo de segmento de rehacer es liberado para re uso.

Si la transacción se deshace, los cambios son deshechos

Page 37: CLASE 8 Lenguaje de Manipulacion de Datos

La original vieja versión de los datos en el segmento de rehacer es escrita de nuevo a la

tabla

Todos los usuarios ven la base de datos tal como estaba antes de que la transacción

iniciara.

Page 38: CLASE 8 Lenguaje de Manipulacion de Datos

Clausula FOR UPDATE en la sentencia SELECT

Cuando usted expide una sentencia SELECT en la base de datos para consultar algunos registros,

ningún bloqueo se establece en las filas seleccionadas. En general, esto es requerido porque el

número de registros bloqueados en cualquier momento específico (por defecto) se mantiene al

mínimo: solo aquellos registros que han sido modificados pero aún no son confirmados son

bloqueados. Incluso entonces, otros podrán leer esos registros como aparecían antes del cambio

(la imagen anterior de los datos). Hay algunas veces, sin embargo, cuando podría necesitar

bloquear un conjunto de registros incluso antes de modificarlos en su programa. Oracle ofrece la

cláusula FOR UPDATE de la sentencia SELECT para realizar este bloqueo.

Cuando expide una sentencia SELECT… FOR UPDATE, el sistema administrador de la base de datos

relacional (RDBMS) automáticamente obtiene bloqueos exclusivos a nivel de registros en todos los

registros identificados por la sentencia SELECT, así conserva estos registros “para sus cambios

solamente”. Nadie más podrá modificar alguno de estos registros hasta que usted realice un

ROLLBACK o un COMMIT.

Puede adjuntar la palabra clave NOWAIT para la cláusula FOR UPDATE para decirle al servidor

Oracle que no espere si la tabla ha sido bloqueada por otro usuario. En este caso, el control será

retornado inmediatamente a su programa o a su ambiente de SQL Developer para que pueda

realizar otro trabajo, o esperar por un periodo de tiempo antes de intentar de nuevo. Sin la

Page 39: CLASE 8 Lenguaje de Manipulacion de Datos

cláusula NOWAIT, su proceso se bloquea hasta que la tabla esté disponible, cuando el bloqueo es

liberado por el otro usuario mediante la expedición del comando COMMIT o ROLLBACK.

Page 40: CLASE 8 Lenguaje de Manipulacion de Datos

Cláusula FOR UPDATE: ejemplos

En el ejemplo de la dispositiva, la sentencia bloquea las filas en la tabla EMPLOYEES con el campo

JOB_ID igual a ‘ST_CLERK’ y el campo LOCATION_ID igual a 1500, y bloquea las filas en la tabla

DEPARTMENTS con un campo DEPARTMENTE_LOCATION igual a 1500.

Puede usar el FOR UPDATE OF nombre de columna para cualificar la columna que intenta

modificar. La lista OF de la cláusula FOR UPDATE no lo restringe a modificar solo esas columnas de

las filas seleccionadas. Bloqueos aún están sobre todas las filas; si usted simplemente coloca FOR

UPDATE en la consulta y no incluye una o más columnas después de la palabra clave OF, la base de

datos bloqueara todas las filas identificadas a través de todas las tablas listadas en la cláusula

FROM.

A siguiente sentencia bloquea solo esas filas en la tabla EMPLOYEES con ST_CLERK localizadas en

LOCATION_ID 1500. Ninguna fila es bloqueada en la tabla DEPARTMENTS

Page 41: CLASE 8 Lenguaje de Manipulacion de Datos

En la siguiente sentencia, la base de datos es instruida para esperar por 5 segundos por la fila para

que esté disponible, y luego retornar el control a usted.