Está en la página 1de 40

Manipulación de Datos

Copyright © EDCON Tecnologías de Información, 2008.


Objetivos

Al completar esta lección podrá realizar lo siguiente:

• Describir cada sentencia DML


• Insertar registros en una tabla
• Actualizar registros en una tabla
• Borrar registros en una tabla
• Control de transacciones

8-2
Lenguaje de Manipulación de Datos
(Data Manipulation Language DML)

• Una sentencia DML es ejecutada cuando:


– Se agregan nuevos registros a una tabla
– Se modifican registros existentes en una tabla
– Se eliminan registros existentes en una tabla
• Una transacción consiste en una colección de
sentencias DML que formen una unidad lógica de
trabajo.

8-3
Agregando un Nuevo Registro
en una Tabla Nuevo
DEPARTMENTS registro

…insertar un
nuevo registro en
la tabla
DEPARMENTS…

8-4
Sintaxis de la sentencia INSERT

• Agrega nuevos registros a una tabla usando la


sentencia INSERT.

INSERT INTO tabla [(columna [, columna...])]


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

• Sólo un registro es insertado con esta sintaxis.

8-5
Insertando Nuevos Registros

• Insertar un nuevo registro que contenga valores


para cada columna.
• Listar valores en el orden por defecto de las
columnas en la tabla.
• Opcionalmente, listar las columnas en la cláusula
INSERT.
INSERT INTO departments(department_id, department_name,
manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
1 row created.

• Encerrar los valores de datos tipo carácter y fecha


en comillas simples.

8-6
Insertando Registros con Valores Nulos

• Método Implícito: Omitir la columna de la lista de


columnas.
INSERT INTO departments (department_id,
department_name )
VALUES (30, 'Purchasing');
1 row created
created.
.

• Método explicito: Especificar la palabra clave NULL


en la cláusula VALUES.
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
1 row created.

8-7
Insertando Valores Especiales

La función SYSDATE toma 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',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 100);
1 row created.

8-8
Insertando Valores Específicos de Fecha

• Agregar un nuevo empleado.


INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'AC_ACCOUNT', 11000, NULL, 100, 30);
1 row created.

• Verificar su adición.

8-9
Creando un Script

• Usar la substitución & en la sentencia SQL para


indicar los valores.
• & es un marcador para el valor de la variable.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);

1 row created.

8-10
Copiando Registros
de Otra Tabla
• Escriba una sentencia INSERT con una
subconsulta.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

4 rows created
created..

• No se usa la cláusula VALUES.


• Debe corresponder el número de columnas en la
cláusula INSERT a las que están en la
subconsulta.

8-11
Modificando Datos en una Tabla
EMPLOYEES

Actualizar registros en la tabla EMPLOYEES.

8-12
Sintaxis de la sentencia UPDATE

• Modifique registros existentes con la sentencia


UPDATE.

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

• Actualice mas de un registro al mismo tiempo, si


es requerido.

8-13
Actualizando Registros en una Tabla

• Especificar el registro o registros que van a ser


modificados en la cláusula WHERE.
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.

• Todos los registros en la tabla son modificados si


se omite la cláusula WHERE.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.

8-14
Actualizando dos columnas
con un subquery

Actualizar el puesto y salario del empleado 114


para corresponder los del empleado 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 = 114;
1 row updated.

8-15
Actualizando Registros
Basado en Otra Tabla

Utilice subconsultas en las sentencias UPDATE para actualizar


registros en una tabla basada en 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);
1 row updated.

8-16
Actualizando Registros:
Error de Restricción de Integridad

UPDATE employees
SET department_id = 55
WHERE department_id = 110;

UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK)
violated - parent key not found

8-17
Eliminando un registro de una tabla
DEPARTMENTS

Borrar un registro de la tabla de DEPARTMENTS.

8-18
La sentencia DELETE

Se pueden eliminar registros existentes de una tabla


usando la sentencia DELETE.

DELETE [FROM] table


[WHERE condition];

8-19
Borrando Registros de una Tabla

• Especificar los registros a borrar con la cláusula


WHERE.
DELETE FROM departments
WHERE department_name = 'Finance';
1 row deleted.

• Todos los registros en la tabla se borraran si se


omite la cláusula WHERE.
DELETE FROM copy_emp;
22 rows deleted.

8-20
Borrando Registros
Basados en Otra Tabla

Usar subconsultas en la sentencia DELETE para eliminar


registros de una tabla basándose en valores de otra tabla.

DELETE FROM employees


WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name LIKE '%Public%');
1 row deleted.

8-21
Borrando Registros:
Error de Restricción de Integridad

DELETE FROM departments


WHERE department_id = 60;

DELETE FROM departments


*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found

8-22
Sentencia TRUNCATE

• Elimina todos los registros de una tabla, dejando


la tabla vacía y su estructura intacta.
• Es una sentencia DDL en lugar de una DML, que
no puede ser fácilmente deshecha una vez
ejecutada.
Sintaxis:
TRUNCATE TABLE table_name;

Ejemplo:
TRUNCATE TABLE copy_emp;

8-23
Usando una subconsulta en
una sentencia INSERT

INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);

1 row created.

8-24
Usando un subquery en
una sentencia INSERT

• Verify
SELECT the resultslast_name, email, hire_date,
employee_id,
job_id, salary, department_id
FROM employees
WHERE department_id = 50;

8-25
Transacciones de la Base de Datos

Una transacción de la base de datos consiste en una


de las siguientes:
• Sentencias DML que constituyen un cambio
consistente a los datos
• Una sentencia DDL
• Una sentencia DCL

8-26
Transacciones de la Base de Datos

• Comienzan cuando la primera sentencia DML SQL


es ejecutada
• Termina cuando ocurre uno de los siguientes
eventos:
– Es emitida una sentencia COMMIT o ROLLBACK
– Es ejecutada una sentencia DDL o DCL (commit
automático)
– El usuario sale del iSQL*Plus
– Se cae sistema

8-27
Ventajas de las
sentencias COMMIT y ROLLBACK

Con las sentencias COMMIT y ROLLBACK se puede:


• Asegurar la consistencia de datos
• Prevenir cambios de datos antes de realizar
cambios permanentes
• Operaciones lógicamente relacionadas de grupo

8-28
Controlando Transacciones
Time COMMIT
Transacción

DELETE
SAVEPOINT A

INSERT

UPDATE
SAVEPOINT B
INSERT ROLLBACK ROLLBACK ROLLBACK
a SAVEPOINT B a SAVEPOINT A

8-29
Realizando ROLLBACK a Marcadores

• Crear un marcador en una transacción actual


usando la sentencia SAVEPOINT.
• Realizar ROLLBACK a un marcador usando la
sentencia ROLLBACK TO SAVEPOINT.
UPDATE...
SAVEPOINT update_done;
Savepoint created.
INSERT...
ROLLBACK TO update_done;
Rollback complete.

8-30
Procesando Transacciones Implícitas

• Un commit automático ocurre bajo las siguientes


circunstancias:
– Es emitida una sentencia DDL
– Es emitida una sentencia DCL
– Salida normal del iSQL*Plus, sin emitir sentencias
explicitas como COMMIT o ROLLBACK
• Un rollback automático ocurre bajo una
terminación anormal del iSQL*Plus o falla del
sistema.

8-31
Estado de los datos antes del
COMMIT o ROLLBACK

• El estado previo de los datos pueden ser recuperados.


• El usuario actual puede revisar los resultados de las
operaciones DML usando la sentencia SELECT.
• Otros usuarios no pueden ver los resultados de las
sentencias DML del usuario actual.
• Los registros afectado son bloqueados; otros usuarios
no pueden cambiar los datos de los registros afectados.

8-32
Estado de los Datos después del COMMIT

• Los cambios en los datos se hacen permanentes en la


base de datos.
• El estado previo de los datos se pierde
definitivamente.
• Todos los usuarios pueden ver los resultados.
• Los bloqueos de los registros afectados son
liberados; estos registros se encuentran disponibles
para que otros usuarios los manipulen.
• Todos los “savepoints” son borrados.

8-33
Haciendo COMMIT a los Datos

• Haciendo las modificaciones.


DELETE FROM employees
WHERE employee_id = 99999;
1 row deleted.

INSERT INTO departments


VALUES (290, 'Corporate Tax', NULL, 1700);
1 row inserted.

• Commit a los cambios.


COMMIT;
Commit complete.

8-34
Estado de los Datos
después del ROLLBACK

Descartar todos los cambios pendientes usando la


sentencia ROLLBACK:
• Se deshacen los cambios a los Datos.
• El estado previo de los datos es restituido.
• El bloqueo en los registros afectados es liberado.

DELETE FROM copy_emp;


22 rows deleted.
ROLLBACK;
Rollback complete.

8-35
Nivel de la sentencia Rollback

• Si una sentencia simple DML falla durante la


ejecución, solamente a la sentencia se le realiza el
rollback.
• El servidor Oracle implementa un savepoint
implícito.
• Todos los demás cambios son retenidos.
• El usuario debe terminar la transacción
explícitamente ejecutando la sentencia COMMIT o
ROLLBACK.

8-36
Consistencia de lectura

• Garantiza una vista consistente de los datos en


todo el tiempo.
• Los cambios hechos por un usuario no tiene
conflictos con los cambios hechos por otro
usuario.
• Garantiza que en los mismos datos:
– Los lectores no esperen a los escritores.
– Los escritores no esperen por los lectores.

8-37
Implementando Consistencia de Lectura

Usuario A
UPDATE employees Bloques
SET salary = 7000 de datos
WHERE last_name = 'Goyal';

Segmentos
undo

Datos
SELECT * cambiados y
FROM userA.employees; Read no cambiados
consistent
Antes del
image
cambio de
datos “viejos”
Usuario B

8-38
Resumen

En esta lección se habrá aprendido acerca de cómo


usar sentencias DML y control de transacciones.
Sentencia Descripción

INSERT Agrega un nuevo registro a la tabla

UPDATE Modificar registros existentes en la tabla

DELETE Elimina registros existentes de la tabla

MERGE Condicionalmente inserta o actualiza datos

COMMIT Los cambios pendientes como permanentes

SAVEPOINT Es usado para regresar a la marca de savepoint

ROLLBACK Descarta los cambios pendientes de datos

8-39
Practica 8 Visión General

Esta practica cubre los siguientes temas:


• Insertar registros en tablas
• Actualizar y borrar registros en la tabla
• Control de transacciones

8-40