You are on page 1of 50

BASE DE DATOS

Manipulando Datos
Al terminar esta leccin, estars capacitado
para:
Describir cada sentencia DML.
Insertar filas en una tabla.
Modificar filas en una tabla.
Borrar filas de una tabla.
Unir filas en una tabla.
Controlar Transacciones.
Una sentencia DML es ejecutada cuando:

Se agrega una fila a una tabla.


Se modifica una fila de una tabla.
Se remueve una fila de una tabla.

Una transaccin consiste de una coleccin


de sentencias DML que forman una unidad
lgica de trabajo.
Nueva
Fila
Departamentos
Insertar una
nueva en la
tabla
departamentos
Para agregar una nueva fila a una tabla
se debe usar la sentencia INSERT.
INSERT INTO table [(column[, column ...])]
VALUES (values [, values...]);

Con esta sintaxis slo se puede ingresar


una fila.
Insertar una nueva fila que contenga los
valores para cada columna.
Listar los valores en el orden por defecto de
las columnas en la tabla.
Opcionalmente, listar las columnas en la
clusula INSERT.
INSERT INTO departamentos (departamento_id, dept_nombre, jefe_id,
lugar_id)
VALUES (70,Public Relations,100,1700);
1 fila creada

Encerrar los valores de caracter y fecha


entre comillas simples.
Mtodo implcito: Omitir la columna en la lista de
columnas.

INSERT INTO departamentos(departamento_id, dept_nombre )


VALUES (30,Purchasing);
1 fila creada

Mtodo explcito: Especificar la palabra clave NULL


en la clusula VALUES.

INSERT INTO departamentos VALUES (100,Finance, NULL,NULL);


1 fila creada
INSERT INTO empleados(empleado_id, nombre, apellido, email,
fono, fecha_ing, cargo_id, salario,
comision_porc, jefe_id, departamento_id)
VALUES (113, Louis, Popp, LPOPP,515.124.4567, SYSDATE,
AC_ACCOUNT, 6900, NULL, 205, 100);
1 fila creada
Agrega un nuevo empleado.

INSERT INTO empleados


VALUES (114, Den, Raphealy,DRAPHEAL,
515.127.4561,
TO_DATE(03-02-1999, DD-MM-YYYY),AC_ACCOUNT,
11000, NULL, 100, 30);
1 fila creada

Verificar el ingreso.
Usar el & en una sentencia SQL para solicitar los
valores.

El & es un contenedor para valores de variables.

INSERT INTO departamentos(departamento_id, dept_nombre,lugar_id)


VALUES (&codigo, &nombre,&lugar);
Escribir la sentencia INSERT con una sub
consulta.
INSERT INTO sales_rep(id, name, salary, commission_pct)
SELECT empleado_id, apellido, salario, comision_porc
FROM empleados
WHERE cargo_id LIKE %REP%;

No se usa la clusula VALUES.


Se debe igualar el nmero de columnas en la
clusula INSERT con los de la sub consulta.
EMPLEADOS

Filas actualizadas en la tabla EMPLEADOS.


Para modificar filas existentes se usa la
sentencia UPDATE.

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

Actualiza ms de una fila a la vez, si se


requiere.
Una fila o filas especficas son modificadas
si se especifica la clusula WHERE.
UPDATE empleados
SET departamento_id=70
WHERE empleado_id=113;

Si se omite la clusula WHERE todas las filas


de la tabla son modificadas.
UPDATE copy_emp
SET departamento_id=110;
22 fila actualizadas
Actualizar el cargo y salario del empleado 114
para que sean iguales a los del empleado 205.

UPDATE empleados
SET cargo_id = (SELECT cargo_id
FROM empleados
WHERE empleado_id = 205),
salario = (SELECT salario
FROM empleados
WHERE empleado_id = 205)
WHERE empleado_id = 114;
Usar sub consultas en la sentencia UPDATE
pera actualizar filas en una tabla basada en
valores de otra tabla.

UPDATE copy_emp
SET departamento_id = (SELECT departamento_id
FROM empleados
WHERE empleado_id = 100
WHERE cargo_id = (SELECT cargo_id
FROM empleados
WHERE empleado_id = 200);
UPDATE empleados
SET departamento_id = 55
WHERE departamento_id = 110;

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

El departamento nmero 55 no existe.


Departamentos

Eliminar una fila de la tabla departamento.


Se puede eliminar filas existentes de una tabla usando
la sentencia DELETE.

DELETE [FROM] table


[WHERE condition];
Se puede usar la clusula WHERE para eliminar filas
especficas.

DELETE FROM departamentos


WHERE dept_nombre= Finance;

Se pueden eliminar todas las filas de la tabla omitiendo


la clusula WHERE.

DELETE FROM departamentos


Usando sub consultas con la sentencia DELETE se
pueden eliminar filas desde una tabla basados en
valores de otra tabla.

DELETE FROM empleados


WHERE departamento_id =
(SELECT departamento_id
FROM departmentos
WHERE dept_nombre LIKE %Public%);
DELETE FROM departamentos
WHERE departamento_id = 60;

DELETE FROM departamentos


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

No se puede borrar una fila que contiene una clave


primaria que est siendo usada como clave fornea en
otra tabla.
INSERT INTO
(SELECT empleado_id, apellido, email, fecha_ing,
cargo_id, salario, departamento_id
FROM empleados
WHERE departamento_id = 50
VALUES (99999, Taylor, DTAYLOR,
TO_DATE(07-06-99,DD-MM-RR),ST_CLERK, 5000, 50);
Una sub consulta se utiliza para identificar la tabla y las
columnas de la sentencia DML.
La palabra clave WITH CHECK OPTION prohibe
cambiar filas que no estn en la subconsulta.
INSERT INTO (SELECT empleado_id, apellido, email,
fecha_ing, cargo_id, salario
FROM empleados
WHERE departamento_id = 50 WITH CHECK OPTION)
VALUES (99998,Smith, JSMITH,TO_DATE(07-06-99,DD-MM-RR),
ST_CLERK, 5000);
INSERT INTO
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
En valores explcitos por defecto, se puede
usar la palabra clave DEFAULT como valor
de una columna donde se desea el valor por
defecto.
La incorporacin de esta caracterstica est
para el estndar SQL 1999.
Esto permite al usuario controlar dnde y
cundo el valor por defecto debera ser
aplicado a los datos.
Los valores explcitos por defecto pueden
ser usados con la sentencia INSERT y
UPDATE.
DEFAULT con INSERT.

INSERT INTO departamentos (departamento_id, dept_nombre, jefe_id)


VALUES (300, Engineering, DEFAULT);

DEFAULT con UPDATE.

UPDATE departamentos
SET jefe_id = DEFAULT WHERE departamento_id = 10;
Proporciona la capacidad de actualizar o de insertar
datos en una tabla de la base de datos a travs de una
condicin.

Realiza un UPDATE si la fila existe o un INSERT si es


una nueva fila.

Evita actualizaciones separadas.


Aumenta el desempeo y la facilidad de uso.
Es til en aplicaciones de data warehousing.
Se puede condicionar un INSERT o UPDATE
de filas en una tabla usando la sentencia
MERGE.
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join_condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col1_val1,
col2 = col2_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
Insertar o actualizar filas en la tabla COPY_EMP
igualando la tabla EMPLEADOS.

MERGE INTO copy_emp c


USING empleados e
ON (c.empleado_id = e.empleado_id)
WHEN MATCHED THEN
UPDATE SET
c.nombre = e.nombre,
c.last_name = e.last_name,
...
c.departamento_id = e.departamento_id
WHEN NOT MATCHED THEN
INSERT VALUES
(e.empleado_id, e.nombre, e.apellido, e.email,
e.fono, e.fecha_ing, e.cargo_id, e.salario,
e.comision_porc, e.jefe_id, e.departamento_id);
SELECT *
FROM COPY_EMP;
No se seleccionaron filas

MERGE INTO copy_emp c


USING empleados e
ON (c.empleado_id = e.empleado_id)
WHEN MATCHED THEN
UPDATE SET
...
WHEN NOT MATCHED THEN
INSERT VALUES ...;
SELECT *
FROM COPY_EMP;
20 filas seleccionadas
Una transaccin en una base de datos consiste
en :
Sentencias DML que constituyen un cambio de
datos consistente.

Una sentencia DDL.

Una sentencia DCL.


Se inicia cuando la primera sentencia SQL DML
es ejecutada.
Termina con uno de los siguientes eventos:
Se usa una sentencia COMMIT o ROLLBACK.
Se ejecuta una sentencia DDL o DCL (commit
automtico).
El usuario sale de iSQL*Plus.
El sistema falla.
Con una sentencia COMMIT y ROLLBACK se
puede:

Asegurar la consistencia de datos.

Previsualizar el cambio de los datos antes de


hacerlos permanentes.

Agrupar operaciones lgicamente relacionadas.


Tiempo COMMIT

Transaccin

DELETE

SAVEPOINT A

INSERT

UPDATE

SAVEPOINT B

INSERT

ROLLBACK ROLLBACK ROLLBACK


to SAVEPOINT B to SAVEPOINT A
Crearun marcador en una transaccin actual
usando la sentencia SAVEPOINT.
Retornar de nuevo a ese marcador usando la
sentencia ROLLBACK TO SAVEPOINT .

UPDATE ...
SAVEPOINT update_done;
Savepoint created.
INSERT ...
ROLLBACK TO update_done;
Rollback complete.
Un COMMIT automtico ocurre bajo las
siguientes cirscunstancias:

Ocurre una sentencia DDL.


Ocurre una sentencia DCL.
Se sale normalmente de iSQL*Plus, sin realizar
explcitamente una sentencia COMMIT o
ROLLBACK.

Un ROLLBACK automtico ocurre bajo una


terminacin anormal de iSQL*Plus o una
falla del sistema.
El estado previo de los datos puede ser
recuperado.
El
usuario actual puede revisar los resultados
de una operacin DML usando la sentencia
SELECT.
Otrosusuarios no pueden ver los resultados de
sentencias DML del usuario actual.
Las filas afectadas estn bloqueadas; otros
usuarios no pueden modificar los datos de las
filas afectadas.
Lasmodificaciones realizadas se hacen
permanentes en la base de datos.
El
estado anterior de los datos se pierde
permanentemente.
Todos los usuarios pueden ver los resultados.
Los bloqueos de las filas afectadas son
liberados; todas las filas estn disponibles para
ser manipuladas por otros usuarios.
Todos los SAVEPOINT son eliminados.
Hacer los cambios.
DELETE FROM empleados
WHERE empleado_id = 99999;
1 fila eliminada
INSERT INTO departamentos
VALUES (290,Corporate Tax, NULL, 1700);
1 fila insertada

Haciendo el COMMIT.
COMMIT;
Commit realizado.
Sepueden descartar todos las
modificaciones pendientes usando la
sentencia ROLLBACK:
Se deshacen los cambios de los datos.
El estado previo de los datos es restaurado.
El bloqueo de las filas afectadas es liberado.
DELETE FROM copy_emp
22 filas eliminadas
ROLLBACK
Rollback ejecutado
Siuna sola sentencia DML falla durante la
ejecucin, slo esa sentencia es deshecha.

El
servidor Oracle implementa un SAVEPOINT
implcito.
Todos los otros cambios son retenidos.

Elusuario podra terminar explcitamente las


transacciones ejecutando una sentencia
COMMIT o ROLLBACK.
Laconsistencia de la lectura garantiza una vista
consistente de los datos en todo momento.
Los cambios realizados por un usuario no
generan conflicto con los cambios realizados
por otro usuario.
La consistencia de la lectura asegura que sobre
los mismos datos:
Lecturas no esperan a escrituras.
Escrituras no esperan lecturas.
User A
UPDATE empleados Bloque
SET salario = 7000 de datos
WHERE apellido = Goyal;
Segmentos
de Rollback

User B Datos
cambiados
y no
SELECT *
Read cambiados
FROM userA.empleados;
Consistent
image Antes de
cambiar
datos
antiguos
SALIDA TIEMPO SESSION 1 SESSION 2

24.000 T1 SELECT salario FROM empleados


WHERE apellido = King;

T2
UPDATE empleados
SET salario=salario+10000
WHERE apellido = King;
24.000 T3 SELECT salario FROM empleados
WHERE apellido = King;
T4 COMMIT

34.000
T5 SELECT salario FROM empleados
WHERE apellido = King;
Bloqueos en la Base de Datos Oracle:

Previenen interacciones destructivas entre


transacciones concurrentes.
No requiere ninguna accin del usuario.
Utiliza automticamente el nivel ms bajo de
restriccin.
Se mantiene mientras dure la transaccin.
Hay de dos tipos: bloqueos explcitos e
implcitos.
En esta leccin has aprendido a usar
sentencias DML y control de transacciones.
Sentencia Descripcin
INSERT Agrega un nuevo registro a la tabla
UPDATE Modifica filas existentes en una tabla
DELETE Elimina filas existentes en una tabla
MERGE Inserta o actualiza condicionalmente datos en
una tabla
COMMIT Hace que todos los cambios pendientes se
hagan permanentes
SAVEPOINT Es usado por el rollback para marcar un
savepoint
ROLLBACK Descarta todos los cambios pendientes
Dos modos de bloqueos:

Exclusivo: Bloquea a otros usuarios.


Compartido: Permite que otros usuarios
tengan acceso.
Alto
nivel de concurrencia de los datos:
DML: Tablas compartidas, filas exclusivas.
Consultas: No requiere bloqueo.
DDL: Protege las definiciones de los objetos.

Bloqueo
permanece hasta un COMMIT o
ROLLBACK.
En esta prctica debers realizar las
siguientes actividades:
Insertar filas en una tabla.
Actualizar y eliminar filas en una tabla.
Controlar transacciones.
FIN

You might also like