Está en la página 1de 33

PRACTICA 10

MANIPULACION DE DATOS

OBJETIVOS

Al finalizar esta leccin, usted debera ser capaz de hacer lo siguiente:


Describir cada lenguaje de manipulacin de datos (DML)

FIS
Insertar registros en una tabla
Actualizar los registros de una tabla
Eliminar registros de una tabla
Operaciones de control

En esta leccin, aprender a utilizar el lenguaje de manipulacin de datos (DML) para


insertar registros en una tabla, actualizar los registros existentes en una tabla, y eliminar
registros existentes de una tabla. Tambin aprender a controlar las transacciones con las
sentencias COMMIT, SAVEPOINT, y ROLLBACK.

LECCIN DEL ORDEN DEL DA

Adicin de nuevos registros en una tabla


- Sentencia INSERT
Cambiando datos en una tabla
- Sentencia UPDATE
Eliminando registros en una tabla:
- Sentencia DELETE
- Sentencia TRUNCATE
Las transacciones de bases de datos utilizando el control de COMMIT, ROLLBACK y
SAVEPOINT
Consistencia de lectura
Clusula FOR UPDATE en una sentencia SELECT

LENGUAJE DE MANIPULACIN DE DATOS

Una declaracin de DML se ejecuta cuando:


- Agrega nuevos registros a una tabla
- Modifica los registros existentes en una tabla
- Elimina los registros existentes de una tabla
Una transaccin consiste en una coleccin de sentencias DML que forman una unidad
lgica de trabajo.

El lenguaje de manipulacin de datos (DML) es una parte fundamental de SQL. Cuando


se desea agregar, actualizar o borrar datos en la base de datos, se ejecuta una sentencia
DML. Una coleccin de sentencias DML que forman una unidad lgica de trabajo que se
llama una transaccin.
Considrese una base de datos de la banca. Cuando un cliente de un banco transfiere
dinero de una cuenta de ahorros a una cuenta corriente, la transaccin puede consistir en
tres operaciones distintas: la disminucin de la cuenta de ahorros, el aumento de la
cuenta de cheques, y el registro de la transaccin en el diario de transacciones. El
servidor de Oracle debe garantizar que todas las tres sentencias SQL se llevan a cabo
para mantener las cuentas en equilibrio. Cuando algo le impide a uno de los estados en la
operacin de la ejecucin, los otros estados de la transaccin deben ser deshechos.

Nota

FIS
La mayora de las sentencias DML en esta leccin asume que no hay restricciones en
la tabla que sean violadas. Las restricciones se discutir ms adelante en este curso.
En SQL Developer, haga clic en el icono Ejecutar secuencia de comandos o pulsar
[F5] para ejecutar las instrucciones DML. Los mensajes de comentarios se mostrar
en la pgina de salida de secuencia de comandos con pestaas.

AGREGAR UN REGISTRO NUEVO A UNA TABLA

El grfico en la diapositiva ilustra la adicin de un nuevo departamento de la tabla


DEPARTMENTS.

SINTAXIS DE SENTENCIA INSERT

Agregue nuevos registros a una tabla mediante la instruccin INSERT:

INSERT INTO table [(column [, column...])]


VALUES (value [, value...]);

Con esta sintaxis, slo un registro se inserta a la vez.


Usted puede agregar nuevos registros a una tabla mediante la emisin de la sentencia
INSERT.

En la siguiente sintaxis:

Table Es el nombre de la tabla


Column Es el nombre de la columna de la tabla para rellenar
Value Es el valor correspondiente a la columna

FIS
Nota: Esta declaracin, con la clusula VALUES slo agrega un registro a la vez a una
tabla.

INSERCIN DE NUEVOS REGISTROS

Insertar un nuevo registro que contiene los valores para cada columna.
Los valores de la lista en el orden predeterminado de las columnas de la tabla.
Opcionalmente, una lista de las columnas en la clusula INSERT.
Incluya el carcter y los valores de fecha entre comillas simples.

INSERT INTO departments(department_id,


department_name, manager_id, location_id)
VALUES (310, 'Imagen Institucional', 100, 1700);
Debido a que usted puede insertar un nuevo registro que contiene los valores para cada
columna, la lista de columnas no se requiere en la clusula INSERT. Sin embargo, si
usted no utiliza la lista de columnas, los valores deben estar inscritos de acuerdo con el
orden predeterminado de las columnas de la tabla, y un valor debe ser proporcionado
para cada columna.

FIS
Para mayor claridad, utilice la lista de columnas en la clusula INSERT.
Incluya el carcter y los valores de fecha entre comillas simples, sin embargo, no es
recomendable que incluya los valores numricos entre comillas simples.

INSERTAR REGISTROS CON VALORES NULL

Mtodo Implcito: Omita la columna de la lista de columnas.

INSERT INTO departments (department_id,


department_name)
VALUES (30, 'Purchasing');

Mtodo Explcito: Especifique la palabra clave NULL en la clusula VALUES.


INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);

FIS
Mtodo Descripcin
Implcito Omite la columna de la lista de columnas
Explcita Especifique la palabra clave NULL en la lista de valores, especificar la
cadena vaca ('') en la lista de valores de cadenas de caracteres y fechas

Asegrese de que usted puede utilizar los valores nulos en la columna dirigida por la
verificacin del estado nulo con el comando DESCRIBE.

El servidor de Oracle aplica automticamente a todos los tipos de datos, rangos de datos
y restricciones de integridad de datos. Cualquier columna que no se relacionan de manera
explcita se obtiene un valor nulo en la nueva registro.

Los errores ms comunes que pueden ocurrir durante la entrada del usuario se
comprueban en el orden siguiente:

El valor obligatorio falta de una columna NOT NULL


Duplicar el valor violacin de cualquier restriccin de clave nica o primaria
Cualquier valor viola una restriccin CHECK
La integridad referencial mantiene para la restriccin de clave externa
Los desajustes de tipo de datos o valores demasiado grande para caber en la columna

Nota: El uso de la lista de columnas es recomendable porque hace que la sentencia


INSERT ms legible y fiable, o menos propensa a errores.

INSERCIN DE VALORES ESPECIALES

La funcin SYSDATE registra la fecha y hora actuales.

INSERT INTO employees (employee_id, first_name, last_name,


email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP01', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 110);

FIS
Puede utilizar las funciones especiales para introducir los valores en la tabla.

En el ejemplo de la dispositiva se registra al empleado Popp en la tabla EMPLOYEES. Se


suministra la fecha y la hora actuales en la columna Hire_date. Utiliza la funcin
SYSDATE que devuelve la fecha y la hora actuales del servidor de base de datos.
Tambin puede utilizar la funcin de CURRENT_DATE para obtener la fecha actual en la
zona de tiempo de la sesin. Tambin puede utilizar la funcin USER cuando se insertan
registros en una tabla. La funcin USER registra el nombre del usuario actual.

Confirmando Adiciones a la Tabla

SELECT employee_id, last_name, job_id, hire_date, commission_pct


FROM employees
WHERE employee_id = 113;
FIS
INSERCIN DE LOS VALORES ESPECFICOS DE FECHA Y HORA

Agregue un nuevo empleado.

INSERT INTO employees


VALUES (302,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);

Verifique su adicin.
FIS
El formato DD-MON-RR se utiliza generalmente para insertar un valor de fecha. Con el
formato de RR, el sistema proporciona el siglo correcto automticamente.

Tambin puede proporcionar el valor de fecha en el formato DD-MON-YYYY. Esto es


recomendable, ya que se especifica claramente el siglo y no depende de la lgica de
formato interno RR de especificar el siglo correcto.

Si una fecha se debe introducir en un formato que no sea el formato por defecto (por
ejemplo, con un siglo o un momento especfico), debe utilizar la funcin TO_DATE. El
ejemplo de la diapositiva registra la informacin para el empleado Raphealy en la tabla
EMPLOYEES. Se establece la columna Hire_date a ser 03 de febrero 1999.

CREACIN DE UNA SECUENCIA (SCRIPT)

Use la sustitucin & en una sentencia SQL para que solicite los valores.
& es un marcador de posicin para el valor de la variable.

INSERT INTO departments


(department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);
FIS
Puede guardar comandos con variables de sustitucin en un archivo y ejecutar los
comandos en el archivo. El ejemplo de la diapositiva registra la informacin de un
departamento en la tabla DEPARTMENTS.

Ejecute el archivo de comandos y se le pide entrada para cada una de las variables de
sustitucin de ampersand (&). Despus de introducir un valor para la variable de
sustitucin, haga clic en el botn Aceptar. Los valores de entrada que luego son
sustituidos en el comunicado. Esto le permite ejecutar el archivo mismo guin una y otra
vez, pero proporciona un conjunto de valores diferentes cada vez que lo ejecute.

COPIA DE REGISTROS DE OTRA TABLA

Escriba su instruccin INSERT con una subconsulta:


No utilice la clusula VALUES.
Hacer coincidir el nmero de columnas en la clusula INSERT a los de la subconsulta.
Inserta todas los registros devueltas por la subconsulta en la tabla, sales_reps.

FIS
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

Puede utilizar la instruccin INSERT para agregar registros a una tabla donde los valores
se derivan de las tablas existentes. En el ejemplo de la diapositiva, para la instruccin
INSERT INTO para trabajar, debe haber creado la tabla sales_reps utilizando la sentencia
CREATE TABLE. CREATE TABLE se discute en la leccin titulada "Uso de Sentencias
DDL para Crear y Gestionar Tablas."

En lugar de la clusula VALUES, se utiliza una subconsulta.

Sintaxis

INSERT INTO table [ column (, column) ] subquery;

En la siguiente sintaxis:

Table Es el nombre de la tabla


Column Es el nombre de la columna de la tabla para rellenar
Subquery Es la subconsulta que devuelve registros a la tabla

El nmero de columnas y sus tipos de datos en la lista de columnas de la clusula


INSERT debe coincidir con el nmero de valores y tipos de datos en la subconsulta. Cero
o ms registros se agregan en funcin del nmero de registros devueltas por la
subconsulta. Para crear una copia de los registros de una tabla, utilice SELECT * en la
subconsulta:

INSERT INTO copy_emp


SELECT *
FROM employees;
CAMBIAR DATOS EN UNA TABLA

FIS
La diapositiva muestra el cambio del nmero de departamento de los empleados del
departamento 60 al departamento 80.

SINTAXIS DE LA SENTENCIA UPDATE

Modificar los valores existentes en una tabla con la instruccin UPDATE:

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

Actualizacin de ms de un registro a la vez (si es necesario).

Puede modificar los valores existentes en una tabla mediante la instruccin UPDATE.

En la siguiente sintaxis:

Table
Column
Value
Es el nombre de la tabla
Es el nombre de la columna de la tabla para rellenar
Es el valor correspondiente o subconsulta para la columna

Identifica condicin de los registros que se actualiza y se compone de nombres de


columnas, expresiones, constantes, subconsultas y operadores de comparacin

Confirme la operacin de actualizacin mediante la consulta de la tabla para mostrar los


registros actualizadas.
Para obtener ms informacin, consulte la seccin "ACTUALIZAR" en Oracle Database
Server Referencia del lenguaje 11g, Release 1 (11.1).

Nota: En general, utilice la columna de clave principal en la clusula WHERE para


identificar una solo registro para su actualizacin. Uso de otras columnas inesperada
puede causar varias registros que desea actualizar. Por ejemplo, la identificacin de un
solo registro en la tabla de EMPLOYEES por su nombre es peligrosa, porque ms de un
empleado puede tener el mismo nombre.

FIS
ACTUALIZACIN DE REGISTROS DE UNA TABLA

Los valores de un registro especfica o los registros que se modifican si se especifica


la clusula WHERE:

UPDATE employees
SET department_id = 50
WHERE employee_id = 302;

Los valores de todas los registros de la tabla se modifican si se omite la clusula


WHERE:

UPDATE copy_emp
SET department_id = 110;
Especificar SET column_name = NULL para actualizar un valor de columna a NULL.

La sentencia UPDATE modifica los valores de un registro o registros si la clusula


WHERE se especifica. El ejemplo de la diapositiva muestra la transferencia del
empleados 302 (Popp) para el departamento 50.

Si se omite la clusula WHERE, los valores de todos los registros de la tabla se han
modificado. Examine los registros actualizados de la tabla COPY_EMP.

FIS
SELECT last_name, department_id
FROM copy_emp;

Por ejemplo, un empleado que fue un SA_REP ahora ha cambiado su trabajo a un


IT_PROG. Por lo tanto, su JOB_ID necesita ser actualizado y el campo de la comisin
debe establecerse en NULL.

UPDATE employees
SET job_id = 'IT_PROG', commission_pct = NULL
WHERE employee_id = 114;

Nota: La tabla COPY_EMP tiene los mismos datos que la tabla EMPLOYEES.

ACTUALIZACIN DE DOS COLUMNAS CON UNA SUBCONSULTA

Trabajo de actualizacin de 113 empleados y el salario para que coincida con los de los
empleados 205.

UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
FIS
Puede actualizar varias columnas en la clusula SET de una instruccin UPDATE,
escribiendo varias subconsultas. La sintaxis es como sigue:

UPDATE table
SET column =
(SELECT column
FROM table
WHERE condition)
[,
column =
(SELECT column
FROM table
WHERE condition)]
[WHERE condition ] ;

El ejemplo de la diapositiva tambin puede escribirse como sigue:

UPDATE employees
SET (job_id, salary) = (SELECT job_id, salary
FROM employees
WHERE employee_id = 302)
WHERE employee_id = 301;

ACTUALIZACIN DE REGISTROS BASNDOSE EN OTRA TABLA

Utilice las subconsultas en las sentencias UPDATE para actualizar los valores de los
registros de una tabla basada en los valores de otra tabla:

UPDATE copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);

Puede utilizar las subconsultas en las sentencias UPDATE para actualizar los valores en
una tabla. El ejemplo de la diapositiva actualiza la tabla de COPY_EMP basado en los
valores de la tabla EMPLOYEES. Ello cambia el nmero de departamento de todos los
empleados con el job_id de los empleados cuyo nmero de departamento actual es del
empleado 200.

FIS
EXTRACCIN DE UN REGISTRO DE UNA TABLA

FIS
El departamento de Contratacin ha sido eliminado de la tabla DEPARTMENTS
(suponiendo que no hay restricciones en la tabla DEPARTAMENTS son violados), como
se muestra en el grfico en la diapositiva.

SENTENCIA DELETE

Puede eliminar los registros existentes de una tabla mediante la instruccin DELETE:

DELETE [FROM] table


[WHERE condition];

Puede eliminar los registros existentes de una tabla mediante la instruccin DELETE.

En la siguiente sintaxis:

Table Es el nombre de la tabla


Condition Identifica condicin de los registros a ser borradas, y se compone de los
nombres de columnas, expresiones, constantes, subconsultas y
operadores de comparacin

Nota: Si no hay registros se borran, el mensaje "0 registros eliminadas" se devuelve (en la
ficha de salida de secuencia de comandos en SQL Developer)

Para obtener ms informacin, consulte la seccin en "Eliminar" en Oracle Database 11g


Referencia del lenguaje SQL, Release 1 (11.1).

FIS
ELIMINAR REGISTROS DE UNA TABLA

Los registros especficas se eliminan si se especifica la clusula WHERE:

DELETE FROM departments


WHERE department_name = 'Finance';

Todas los registros de la tabla se borran si se omite la clusula WHERE:

DELETE FROM copy_emp;

Puede eliminar registros especficos mediante la especificacin de la clusula WHERE en


la instruccin DELETE. El primer ejemplo de las eliminaciones de diapositivas del
departamento de Contabilidad de la tabla DEPARTMENTS. Puede confirmar la operacin
de eliminacin, mostrando los registros eliminadas mediante la instruccin SELECT.

SELECT *
FROM departments
WHERE department_name = 'Finance';

Sin embargo, si se omite la clusula WHERE, todos los registros de la tabla se eliminan.
El segundo ejemplo de la diapositiva elimina todos los registros de la tabla COPY_EMP,
porque no hay clusula WHERE se ha especificado.

Ejemplo:
Eliminar los registros identificadas en la clusula WHERE.

DELETE FROM employees WHERE employee_id = 114;


DELETE FROM departments WHERE department_id IN (30, 40);

ELIMINACIN DE REGISTROS BASNDOSE EN OTRA TABLA

Utilice las subconsultas en las sentencias DELETE para eliminar registros de una tabla
basada en los valores de otra tabla:

DELETE FROM employees

FIS
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');

Puede utilizar las subconsultas para eliminar registros de una tabla basada en los valores
de otra tabla. El ejemplo de las diapositivas borra todos los empleados de un
departamento, donde el nombre del departamento contiene la cadena Public.

La subconsulta busca en la tabla DEPARTAMENTS para encontrar el nmero de


departamento basado en el nombre del departamento que contiene la cadena Public. La
subconsulta luego alimenta el nmero de departamento de la consulta principal, que
elimina los registros de datos de la tabla Employees en base a este nmero de
departamento.

SENTENCIA TRUNCATE

Elimina todas los registros de una tabla, dejando la tabla vaca y la estructura de la
tabla intacta

Es un lenguaje de definicin de datos (DDL) en lugar de una sentencia DML, no puede


ser deshecho fcilmente

Sintaxis:
TRUNCATE TABLE table_name;

Ejemplo:
TRUNCATE TABLE copy_emp;

Un mtodo ms eficiente de vaciar una tabla es mediante la instruccin TRUNCATE.


Puede utilizar la sentencia TRUNCATE para eliminar rpidamente todos los registros de
una tabla o clster. La eliminacin de registros con la sentencia TRUNCATE es ms
rpida que la eliminacin de ellos con la instruccin DELETE por las siguientes razones:

La sentencia TRUNCATE es un lenguaje de definicin de datos (DDL) y no genera la


informacin de reversin. Retroceso de la informacin se expone ms adelante en
esta leccin.
Truncar una tabla no se dispara, los factores desencadenantes de borrado de la tabla.
Si la tabla es el padre de una restriccin de integridad referencial, no se puede truncar la
tabla. Tienes que deshabilitar la restriccin antes de emitir la sentencia TRUNCATE.
Deshabilitar restricciones se trata en la leccin titulada "Uso de Sentencias DDL para
Crear y Gestionar Tablas."

LAS TRANSACCIONES DE BASES DE DATOS

Una transaccin de base de datos consta de uno de los siguientes:

FIS
Los DML declaraciones que constituyen un cambio consistente con los datos
Una instruccin DDL
Un lenguaje de control de datos (DCL) una declaracin

El servidor de Oracle garantiza la consistencia de datos basada en transacciones. Las


transacciones que dan ms flexibilidad y control al cambiar los datos, y asegurar la
consistencia de datos en caso de fallo de proceso de usuario o el fracaso del sistema.

Las operaciones consisten en instrucciones DML que constituyen un cambio consistente


con los datos. Por ejemplo, una transferencia de fondos entre dos cuentas debe incluir el
dbito en una cuenta y el crdito a otra cuenta de la misma cantidad. Ambas acciones
deben ya sea fracasar o tener xitos juntos, el crdito no debe estar comprometido sin el
dbito.

Tipo Descripcin
Los datos del lenguaje de Consiste en cualquier nmero de instrucciones DML
manipulacin (DML) que el servidor de Oracle trata como una sola entidad
o una unidad lgica de trabajo
Data Definition Language (DDL) Consta de una sola sentencia DDL
El lenguaje de control de datos Consta de una sola sentencia DCL
(DCL)

LAS TRANSACCIONES DE BASES DE DATOS: INICIO Y FINALIZACIN

Comience cuando la primera sentencia de SQL DML se ejecuta.


Terminar con uno de los siguientes eventos:
- Una sentencia COMMIT o ROLLBACK.
- Una sentencia DDL o DCL ejecuta (compromiso automtico).
- El usuario sale de SQL Developer o SQL * Plus.
- El sistema se bloquea.

Cundo una transaccin de base de datos de inicio y fin?

Una transaccin comienza cuando la instruccin DML se encuentra el primer y termina


cuando una de las siguientes situaciones:

Una declaracin de COMMIT o ROLLBACK.


Una sentencia DDL, como CREATE, se emite.
Una declaracin de DCL se emite.
El usuario sale de SQL Developer o SQL * Plus.
Una mquina falla o se bloquea el sistema.
Despus de que uno termine la transaccin, el ejecutable siguiente sentencia SQL se
inicia automticamente la siguiente transaccin.

Una instruccin DDL o una instruccin DCL se confirma automticamente y, por tanto,
implcitamente termina una transaccin.

VENTAJAS DE LOS ESTADOS COMMIT Y ROLLBACK

FIS
Con sentencias COMMIT y ROLLBACK, puede:
Garantizar la coherencia de datos
Cambios en Vista previa de datos antes de realizar cambios permanentes
Grupo lgicamente relacionados con las operaciones

Con las sentencias COMMIT y ROLLBACK, usted tiene control sobre lo que los cambios a
los datos permanentes.

LAS DECLARACIONES EXPLCITAS DE CONTROL DE TRANSACCIONES

Usted puede controlar la lgica de las transacciones mediante el uso de COMMIT,


SAVEPOINT, y ROLLBACK.

Declaracin Descripcin
COMMIT COMMIT finaliza la transaccin actual, realizar todos los cambios de
datos en espera permanente
SAVEPOINT SAVEPOINT name marca un punto de almacenamiento dentro de la
transaccin actual.
ROLLBACK ROLLBACK termina la transaccin actual, descartando todos los cambios
en los datos pendientes.
ROLLBACK ROLLBACK TO SAVEPOINT deshace la transaccin actual hasta el
TO punto de retorno se especifica, por lo tanto descartar cualquier cambio y/o
SAVEPOINT puntos de retorno que se crearon tras el punto al que se est
name restituyendo. Si se omite la clusula TO SAVEPOINT, la sentencia
ROLLBACK deshace toda la transaccin. Como puntos de retorno son

FIS
lgicos, no hay forma de enumerar los puntos de rescate que ha creado

Nota: Usted no puede comprometerse a un punto de retorno. SAVEPOINT no es parte del


estndar ANSI-SQL

REVERTIR LOS CAMBIOS A UN MARCADOR

Crear un marcador en la transaccin actual mediante el uso de la sentencia


SAVEPOINT.
Reversin de ese marcador mediante el ROLLBACK TO SAVEPOINT.

UPDATE...
SAVEPOINT update_done;

INSERT...
ROLLBACK TO update_done;

Puede crear un marcador en la transaccin actual mediante el uso de la sentencia


SAVEPOINT, que divide la transaccin en secciones ms pequeas. A continuacin,
puede descartar los cambios pendientes hasta que el marcador mediante el ROLLBACK
TO SAVEPOINT.

Tenga en cuenta que si se crea un punto de retorno en segundo lugar con el mismo
nombre que un punto de rescate anterior, el punto de rescate anterior se elimina.

PROCESAMIENTO DE TRANSACCIN IMPLCITA

Un sistema automtico de confirmacin se produce en las siguientes circunstancias:


- Una declaracin emitida DDL
- Una declaracin emitida DCL
- Salida normal de SQL Developer o SQL * Plus, sin explcitamente la emisin de
declaraciones COMMIT o ROLLBACK

Un rollback automtico se produce cuando hay una terminacin anmala de SQL


Developer o SQL * Plus o un fallo del sistema.

Estado Circunstancias
COMMIT Sentencia DDL o DCL declaracin emitida por SQL Developer o SQL *
Automtico Plus sale normalmente, sin explcitamente la emisin de comandos
COMMIT o ROLLBACK
ROLLBACK La terminacin anormal de SQL Developer o SQL * Plus o fallo del
Automtico sistema

Nota: En SQL * Plus, el comando AUTOCOMMIT puede activarse o desactivarse. Si est


en ON, cada sentencia DML persona se ha comprometido tan pronto como se ejecuta. No
se puede deshacer los cambios. Si se establece en OFF, la instruccin COMMIT todava
se puede emitir de forma explcita. Adems, la sentencia COMMIT se emite cuando una
instruccin DDL se haya expedido o al salir de SQL * Plus. El comando SET
AUTOCOMMIT ON / OFF se omite en SQL Developer. DML est comprometido en una

FIS
salida normal de SQL Developer slo si tiene la preferencia automtica habilitada. Para
habilitar la confirmacin automtica, haga lo siguiente:

En el men Herramientas, seleccione Preferencias. En el cuadro de dilogo


Preferencias, expanda la base de datos y seleccionar los parmetros de hoja de
clculo.
En el panel derecho, seleccione la opcin "Confirmacin Automtica en la hoja de
SQL". Haga clic en Aceptar.

Fallas del Sistema

Cuando una transaccin se interrumpe por una falla del sistema, toda la transaccin se
revierte automticamente. Esto evita el error de causar cambios no deseados a los datos
y devuelve las tablas al estado a la hora de la ltima confirmacin. De esta manera, el
servidor Oracle protege la integridad de las tablas.

En SQL Developer, una salida normal de la sesin se lleva a cabo seleccionando Salir en
el men Archivo. En SQL * Plus, una salida normal, se puede hacer con el comando exit
en la peticin.

Al cerrar la ventana es interpretado como una salida anormal.

ESTADO DE LOS DATOS ANTES DE COMMIT O ROLLBACK

El estado anterior de los datos pueden ser recuperados.


El usuario actual puede revisar los resultados de las operaciones de DML mediante la
instruccin SELECT.
Los usuarios de otros no pueden ver los resultados de las sentencias DML emitidos
por el usuario actual.
Los registros afectados estn bloqueadas, otros usuarios no pueden cambiar los datos
de los registros afectadas.
Estado de los datos antes de COMMIT o ROLLBACK

Cada cambio de los datos de que durante la transaccin es temporal hasta que la
transaccin se confirma.

El estado de los datos antes de COMMIT o ROLLBACK se emiten puede ser descrito
como sigue:

Las operaciones de manipulacin de datos afectan principalmente a la base de datos


de bfer, por lo tanto, el estado previo de los datos pueden ser recuperados.
El usuario actual puede revisar los resultados de las operaciones de manipulacin de
datos mediante la consulta de las tablas.
Los usuarios de otros no pueden ver los resultados de las operaciones de
manipulacin de datos realizada por el usuario actual.
Los institutos del servidor de Oracle coherencia de lectura para asegurarse de que
cada usuario ve los datos tal como exista en la ltima confirmacin.
Los registros afectados estn bloqueadas, otros usuarios no pueden cambiar los datos
de los registros afectadas.

FIS
ESTADO DE LOS DATOS DESPUS DE COMMIT

Los cambios en los datos se guardan en la base de datos.


El estado anterior de los datos se sobrescribe.
Todos los usuarios pueden ver los resultados.
Las cerraduras de los registros afectadas son liberados; esos registros estn
disponibles para otros usuarios de manipular.
Todos los puntos de retorno se borran.

Haga todos los cambios pendientes permanentes mediante la instruccin COMMIT. Esto
es lo que sucede despus de una sentencia COMMIT:

Los cambios en los datos se escriben en la base de datos.


El estado anterior de los datos ya no est disponible con la normal de las consultas
SQL.
Todos los usuarios pueden ver los resultados de la transaccin.
Las cerraduras de los registros afectadas son liberados; los registros ya estn
disponibles para que otros usuarios realicen cambios en los datos nuevos.
Todos los puntos de retorno se borran.

CONFIRMANDO DATOS

Realice los cambios:

DELETE FROM employees


WHERE employee_id = 99999;

INSERT INTO departments


VALUES (290, 'Corporate Tax', NULL, 1700);

Confirme los cambios:

COMMIT;

En el ejemplo de la diapositiva, se elimina un registro de la tabla Employees y un nuevo


registro se inserta en la tabla DEPARTMENTS. Los cambios se guardan mediante la
emisin de la sentencia COMMIT.

Ejemplo:
Retire los departamentos 290 y 300 en la tabla DEPARTMENTS y actualizar un registro
en la tabla EMPLOYEES. Guarde el cambio de datos.

DELETE FROM departments


WHERE department_id IN (290, 300);
UPDATE employees
SET department_id = 80
WHERE employee_id = 206;
COMMIT;

FIS
ESTADO DE LOS DATOS DESPUS DE ROLLBACK

Deseche todos los cambios pendientes mediante el uso de la instruccin ROLLBACK:


Los cambios en los datos se deshacen.
El estado anterior de los datos se restaura.
Las cerraduras de los registros afectadas son liberados.

DELETE FROM copy_emp;


ROLLBACK ;

Estado de los datos despus de ROLLBACK.


Deseche todos los cambios pendientes mediante el uso de la instruccin ROLLBACK, que
se traduce en lo siguiente:

Los cambios en los datos se deshacen.


El estado anterior de los datos se restaura.
Las cerraduras de los registros afectadas son liberados.

ESTADO DE LOS DATOS DESPUS DE ROLLBACK: EJEMPLO

DELETE FROM test;


25,000 rows deleted.

ROLLBACK;
Rollback complete.

DELETE FROM test WHERE id = 100;


1 row deleted.

SELECT * FROM test WHERE id = 100;


No rows selected.

COMMIT;
Commit complete.

Al intentar eliminar un registro de la tabla de prueba, sin darse cuenta puede vaciar la
tabla. Sin embargo, usted puede corregir el error, vuelva a emitir una declaracin correcta,
y hacer el cambio permanente de datos.
DECLARACIN DE NIVEL ROLLBACK

Si una sentencia DML nica falla durante la ejecucin, slo que la declaracin se
revierte.
El servidor de Oracle implementa un punto de retorno implcito.
Todos los dems cambios se mantienen.
El usuario debe cancelar las transacciones de forma explcita mediante la ejecucin de
una sentencia COMMIT o ROLLBACK.

FIS
Una parte de una transaccin puede ser desechada a travs de un retroceso implcito si
un error de ejecucin de la sentencia se detecta. Si una sentencia DML nica falla durante
la ejecucin de una transaccin, su efecto se deshace por un retroceso a nivel de
instruccin, pero los cambios realizados por las anteriores declaraciones DML en la
transaccin no se descarta. Se pueden confirmar o deshacer explcitamente por el
usuario.

El servidor de Oracle emite una confirmacin implcita de antes y despus de cualquier


sentencia DDL. Por lo tanto, incluso si su sentencia DDL no se ejecuta correctamente, no
puede volver a la anterior declaracin ya que el servidor emitido una confirmacin.

Terminar sus transacciones de forma explcita mediante la ejecucin de una sentencia


COMMIT o ROLLBACK.

COHERENCIA DE LECTURA

Lea la consistencia garantiza una visin consistente de los datos en todo momento.
Los cambios realizados por un usuario no entren en conflicto con los cambios
realizados por otro usuario.
Lea la consistencia asegura que, en los mismos datos:
- Los lectores no esperan a que los escritores
- Los escritores no esperar a que los lectores
- Escritores de esperar a que los escritores

Usuarios de base de datos acceder a la base de datos de dos maneras:


- Lea las operaciones (SELECT)
- Las operaciones de escritura (INSERT, UPDATE, DELETE)

Se necesita una coherencia de lectura, para que ocurra lo siguiente:


- El lector y escritor de base de datos se garantiza una visin consistente de los
datos.
- Los lectores no ven los datos que est en proceso de ser cambiados.
- Escritores son garantizados que los cambios en la base de datos se hace de una
manera consistente.
- Los cambios realizados por un escritor no perturban o entran en conflicto con los
cambios realizados por otro escritor.

El propsito de la consistencia en la lectura es garantizar que cada usuario ve los datos


tal como exista en la ltima confirmacin, antes de una operacin DML comenz.
Nota: El mismo usuario puede iniciar sesin en diferentes sesiones. Cada sesin
mantiene la consistencia de leer de la manera descrita anteriormente, incluso si son los
mismos usuarios.

IMPLEMENTACIN DE CONSISTENCIA EN LA LECTURA

FIS
Lea la coherencia es una implementacin automtica. Mantiene una copia parcial de la
base de datos en los segmentos de deshacer. La imagen de lectura coherente se
construye a partir de los datos comprometidos en la tabla y los datos de edad que se est
cambiando y an no est comprometida en el segmento de deshacer.

Cuando una operacin de insercin, actualizacin o eliminacin se realiza sobre la base


de datos, el servidor Oracle tiene una copia de los datos antes de que se cambie y lo
escribe en un segmento de deshacer.

Todos los lectores, sino el que emiti el cambio, consulte la base de datos tal como exista
antes de los cambios en marcha; que ver el segmento de deshacer la "instantnea" de los
datos.

Antes de los cambios que se han comprometido a la base de datos, slo el usuario que
est modificando los datos ve a la base de datos con las alteraciones. Todo el mundo ve
la instantnea en el segmento de deshacer. Esto garantiza que los lectores de los datos
que se leen datos consistentes que no est actualmente en proceso de cambio.

Cuando una sentencia DML se ha comprometido, la modificacin introducida en la base


de datos se hace visible a cualquiera que la emisin de una instruccin SELECT despus
de la confirmacin se realiza. El espacio ocupado por los datos antiguos en el archivo
segmento deshacer se libera para su reutilizacin.

Si la transaccin se revierte, los cambios se deshacen:


- La versin original, ms antigua de los datos en el segmento de deshacer se
vuelve a escribir en la mesa.
- Todos los usuarios ven la base de datos tal como exista antes de la operacin
comenz.

CLUSULA FOR UPDATE EN UNA SENTENCIA SELECT

Bloquea los registros de la tabla EMPLEADOS, donde job_id es SA_REP.

FIS
SELECT employee_id, salary, commission_pct, job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;

Bloqueo se libera slo cuando se emite una instruccin ROLLBACK o cometer un


COMMIT.
Si la sentencia SELECT intenta bloquear un registro que est bloqueado por otro
usuario, la base de datos de espera hasta que el registro est disponible y devuelve
los resultados de la instruccin SELECT.

Cuando se emite una instruccin SELECT en la base de datos para consultar algunos
expedientes, registros sin bloqueos se colocan en los registros seleccionados. En general,
esto es necesario porque el nmero de registros bloqueados en un momento dado es (por
defecto) mantiene en el mnimo absoluto: slo aquellos registros que se han cambiado,
pero an no ha confirmado estn bloqueados. Aun as, otros sern capaces de leer los
registros, ya que apareci antes del cambio (el "antes de la imagen" de los datos). Hay
veces, sin embargo, cuando es posible que desee bloquear un conjunto de registros,
incluso antes de que los cambios en su programa. Oracle ofrece la clusula FOR
UPDATE de la instruccin SELECT para realizar este bloqueo.

Cuando se emite un SELECT ... FOR UPDATE, el sistema de bases de datos relacionales
(RDBMS) obtiene automticamente niveles de registros exclusivas en todas los registros
identificadas por la instruccin SELECT, con lo que sostienen los registros "para que los
cambios solamente". Nadie ms va a ser capaz de cambiar cualquiera de estos registros
hasta que se realice un retroceso o un COMMIT.

Puede anexar el NOWAIT palabra clave opcional a la clusula FOR UPDATE para indicar
al servidor de Oracle no esperar si la tabla ha sido bloqueado por otro usuario. En este
caso, el control ser devuelto inmediatamente a su programa o para su entorno SQL
Developer para que pueda realizar otro trabajo, o simplemente esperar por un perodo de
tiempo antes de volver a intentarlo. Sin la clusula NOWAIT, el proceso se bloquear
hasta que la tabla est disponible, cuando los bloqueos se liberan por el otro usuario a
travs de la emisin de un COMMIT o un ROLLBACK.

CLUSULA FOR UPDATE: EJEMPLOS

Puede utilizar la clusula FOR UPDATE en una instruccin SELECT en varias tablas.
SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK
AND location_id = 1500
FOR UPDATE
ORDER BY e.employee_id;

Registros de tanto de los empleados y las tablas DEPARTAMENTOS estn

FIS
bloqueados.
Utilice FOR UPDATE OF column_name para calificar a la columna que desee cambiar
y, a continuacin slo los registros de esa tabla especfica estn bloqueados.

En el ejemplo de la diapositiva, la declaracin bloquea los registros en la tabla


EMPLOYEES con el conjunto de JOB_ID ST_CLERK y LOCATION_ID establecido en
1500, y cierra registros en la tabla DEPARTAMNTS con los departamentos en el conjunto
de LOCATION_ID en 1500.

Usted puede utilizar el FOR UPDATE OF column_name para calificar la columna que
tiene la intencin de cambiar.

El de la lista de la clusula FOR UPDATE no se restringe slo a la evolucin de las


columnas de los registros seleccionadas. Los bloqueos se siguen colocados en todos los
registros, si se limitan a afirmar FOR UPDATE en la consulta y no incluyen una o ms
columnas despus de la de la palabra clave, la base de datos se bloquear todos los
registros identificadas a travs de todas las tablas que figuran en la clusula FROM.

La siguiente declaracin se bloquea slo los registros de la tabla EMPLOYEES con


ST_CLERK ubicados en LOCATION_ID 1500. No hay registros estn bloqueadas en la
tabla DEPARTMENTS:

SELECT e.employee_id, e.salary, e.commission_pct


FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK' AND location_id = 1500
FOR UPDATE OF e.salary
ORDER BY e.employee_id;

En el siguiente ejemplo, la base de datos se le indica que espere cinco segundos para
que el registro que est dispuesta, y luego devolver el control a usted.

SELECT employee_id, salary, commission_pct, job_id


FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE WAIT 5
ORDER BY employee_id;
EXAMEN

Las siguientes declaraciones producen los mismos resultados:

DELETE FROM copy_emp;


TRUNCATE TABLE copy_emp;

1. Verdadero
2. Falso

FIS
Respuesta: 2

RESUMEN

En esta leccin, usted debe haber aprendido a usar las siguientes declaraciones:

Funcin Descripcin
INSERT Agrega una nueva registro a la tabla
UPDATE Modifica los registros existentes en la tabla
DELETE Elimina registros existentes de la tabla
TRUNCATE Elimina todas los registros de una tabla
COMMIT Hace que todos los cambios pendientes permanente
SAVEPOINT Se utiliza para volver a la marca punto de retorno
ROLLBACK Descarta todos los cambios de datos pendientes
FOR UPDATE clause in SELECT Bloquea los registros identificados por la consulta
SELECT

En esta leccin, usted debe haber aprendido a manipular los datos en la base de datos de
Oracle mediante el INSERT, UPDATE, DELETE y TRUNCATE, as como la forma de
controlar los cambios de datos mediante el uso de las sentencias COMMIT, SAVEPOINT
y ROLLBACK. Tambin ha aprendido a utilizar la clusula FOR UPDATE de la instruccin
SELECT para bloquear registros para que los cambios solamente.

Recuerde que el servidor de Oracle garantiza una visin consistente de los datos en todo
momento.
PRCTICA 9: INFORMACIN GENERAL

Esta prctica cubre los siguientes temas:

Los registros Insercin en las tablas


Actualizacin y eliminacin de registros en la tabla
Operaciones de Control

FIS
En esta prctica, se agregan registros a la tabla MY_EMPLOYEE, actualizar y eliminar
datos de la tabla, y controlar sus operaciones. Se ejecuta un script para crear la tabla
MY_EMPLOYEE.

El departamento de recursos humanos quiere crear las instrucciones SQL para insertar,
actualizar y eliminar datos de los empleados. Como prototipo, se utiliza la tabla de
MY_EMPLOYEE antes de dar las declaraciones al departamento de recursos humanos.

Nota: Para todas las sentencias DML, utilice el icono Ejecutar secuencia de comandos (o
pulsar la tecla [F5]) para ejecutar la consulta. De esta manera se llega a ver los mensajes
de comentarios en la pgina Script ficha de salida. Para consultas SELECT, seguir
utilizando el icono de la Declaracin de Ejecutar o presione [F9] para obtener la salida con
formato en la ficha Resultados.

Introducir datos en la tabla MY_EMPLOYEE.

1. Ejecute la instruccin en el guin lab_09_01.sql para construir la tabla


MY_EMPLOYEE utilizado en esta prctica.

2. Describa la estructura de la tabla MY_EMPLOYEE para identificar los nombres de


columna.

3. Crear una instruccin INSERT para agregar el primer registro de datos a la tabla
MY_EMPLOYEE de los siguientes datos de ejemplo. No incluya las columnas en la
clusula INSERT. No entrar en todas los registros todava.

ID LAST_NAME FIRST_NAME USERID SALARY


1 Patel Ralph rpatel 895
2 Dancs Betty bdancs 860
3 Biri Ben bbiri 1100
4 Newman Chad cnewman 750
5 Ropeburn Audrey aropebur 1550
4. Rellenar la tabla MY_EMPLOYEE con la segunda registro de los datos de ejemplo de
la lista anterior. Esta vez, una lista de las columnas explcitamente en la clusula
INSERT.

5. Confirme su adicin en la tabla

FIS
6. Escriba una instruccin INSERT en un archivo de comandos reutilizables dinmicos
para cargar los registros restantes en la tabla MY_EMPLOYEE. El guin debe
impulsar para todas las columnas (ID, Nombre, apellidos, identificador de usuario y
salario). Guardar esta secuencia de comandos en un archivo lab_09_06.sql.

7. Rellenar la tabla con las siguientes dos registros de los datos de ejemplo que figuran
en el paso 3 mediante la ejecucin de la sentencia INSERT en el guin que ha creado.

8. Confirme su adicin en la tabla

9. Hacer las adiciones de datos permanentes.

Actualizar y eliminar datos de la tabla MY_EMPLOYEE.

10. Cambie el nombre del ltimo de los empleados de 3 a Drexler.

11. Cambiar el sueldo a $ 1.000 para todos los empleados que tienen un salario inferior a
900 dlares.

12. Verifique sus cambios en la tabla.

13. Eliminar Dancs Betty de la tabla MY_EMPLOYEE.

14. Confirme los cambios en la tabla.


15. Confirmar todos los cambios pendientes.

Control de transaccin de datos en la tabla de MY_EMPLOYEE.

FIS
16. Rellenar la tabla con el ltimo registro de los datos de ejemplo que figuran en el paso
3 mediante el uso de las sentencias en el script que cre en el paso 6. Ejecutar las
sentencias en el script.

17. Confirme su adicin en la tabla

18. Marcar un punto intermedio en el procesamiento de la transaccin.

19. Eliminar todos los registros de la tabla MY_EMPLOYEE.

20. Confirme que la tabla est vaca.

21. Deseche la operacin DELETE ms reciente sin descartar la operacin a principios de


INSERT.

22. Confirme que el nuevo registro sigue intacta.

23. Realiza la adicin permanente de datos.

Si usted tiene el tiempo, complete el siguiente ejercicio:

24. Modificar el script lab_09_06.sql de tal manera que el USERID se genera de forma
automtica mediante la concatenacin de la primera letra del primer nombre y los siete
primeros caracteres del apellido. El USERID generada debe estar en minsculas. Por
lo tanto, el guin no debe solicitar la USERID. Guardar esta secuencia de comandos
en un archivo denominado lab_09_24.sql.
25. Ejecute el script, lab_09_24.sql para insertar el siguiente registro:

ID LAST_NAME FIRST_NAME USERID SALARY


6 Anthony Mark manthony 1230

26. Confirme que la nueva registro se aadi con ID de usuario correcta.

FIS