Manipulación de Datos

Anuncio
9
Manipulación de Datos
Copyright  Oracle Corporation, 1998. All rights reserved.
Objetivos
Al
ón, deber
ía ser
Al completar
completar esta
esta lecci
lección,
debería
ser
capaz
capaz de
de hacer
hacer lo
lo siguiente:
siguiente:
•
•
•
•
•
9-2
Describir cada sentencia DML
Insertar filas nuevas en una tabla.
Modificar filas de una tabla.
Eliminar filas de una tabla.
Explicar el control de transacciones y
su importancia.
Copyright  Oracle Corporation, 1998. All rights reserved.
El Lenguaje de Manipulación de Datos
•• Una
Una sentencia
sentencia DML
DML se
se ejecuta
ejecuta cuando:
cuando:
–– Añade
Añade nuevos
nuevos registros
registros aa una
una tabla
tabla
–– Modifica
Modifica registros
registros existentes
existentes
–– Elimina
Elimina registros
registros existentes
existentes
•• Una
Una transacción
transacción consiste
consiste en
en una
una
colección
colección de
de sentencias
sentencias DML
DML que
que
forman
forman una
una unidad
unidad lógica
lógica de
de trabajo.
trabajo.
9-3
Copyright  Oracle Corporation, 1998. All rights reserved.
Añadir un Nuevo Registro a una Tabla
50 DEVELOPMENT DETROIT
Nuevo Registro
DEPT
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
“…insertar un nuevo
registro en la tabla DEPT...”
DEPT
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
50 DEVELOPMENT DETROIT
9-4
Copyright  Oracle Corporation, 1998. All rights reserved.
La Sentencia INSERT
•• Añadimos
Añadimos nuevos
nuevos registros
registros aa una
una tabla,
tabla,
por
por medio
medio de
de la
la sentencia
sentencia INSERT.
INSERT.
INSERT
INSERT INTO
INTO
VALUES
VALUES
table
table [(column
[(column [,
[, column...])]
column...])]
(value
(value [,
[, value...]);
value...]);
•• Mediante
Mediante esta
esta sintaxis,
sintaxis, sólo
sólo se
se inserta
inserta
un
un registro
registro al
al mismo
mismo tiempo.
tiempo.
9-5
Copyright  Oracle Corporation, 1998. All rights reserved.
Inserción de Nuevos Registros
•
Insertar una nueva fila conteniendo los
valores para cada columna.
•
Opcionalmente, se pueden listar las
columnas en la cláusula INSERT.
SQL> INSERT INTO
2 VALUES
1 row created.
dept (deptno, dname, loc)
(50, 'DEVELOPMENT', 'DETROIT');
•
Colocar los valores en el orden que las
columnas tienen en la tabla por defecto.
•
Encerrar los valores de datos de tipo
carácter y fecha entre comillas simples.
9-6
Copyright  Oracle Corporation, 1998. All rights reserved.
Inserción de Registros con
Valores Nulos
•
Método Implícito: Omitir la columna en
la lista.
SQL> INSERT INTO
2 VALUES
1 row created.
dept (deptno, dname )
(60, 'MIS');
Método Explícito: Especificar la palabra
clave NULL o el string vacío ('') en la
lista de VALUES.
SQL> INSERT INTO
2 VALUES
1 row created.
9-7
dept
(70, 'FINANCE', NULL);
Copyright  Oracle Corporation, 1998. All rights reserved.
Inserción de Valores Especiales
La
ón SYSDATE
La funci
función
SYSDATE registra
registra la
la fecha
fecha yy
hora
hora actual.
actual.
SQL> INSERT INTO
2
3
4 VALUES
5
6
1 row created.
9-8
emp (empno, ename, job,
mgr, hiredate, sal, comm,
deptno)
(7196, 'GREEN', 'SALESMAN',
7782, SYSDATE, 2000, NULL,
10);
Copyright  Oracle Corporation, 1998. All rights reserved.
Insertando Valores de Fecha Específicos
•• Añadimos
Añadimos un
un nuevo
nuevo empleado:
empleado:
SQL> INSERT INTO
2 VALUES
3
4
1 row created.
emp
(2296,'AROMANO','SALESMAN',7782,
TO_DATE('FEB 3,97', 'MON DD, YY'),
1300, NULL, 10);
•• Verificamos
Verificamos la
la inserción:
inserción:
EMPNO ENAME
JOB
MGR
HIREDATE SAL COMM DEPTNO
----- ------- -------- ---- --------- ---- ----- ----2296 AROMANO SALESMAN 7782 03-FEB-97 1300
10
9-9
Copyright  Oracle Corporation, 1998. All rights reserved.
Inserción de Valores por medio de
Variables de Sustitución
Creamos
Creamos un
un script
script interactivo
interactivo usando
usando
par
ámetros de
ón de
parámetros
de sustituci
sustitución
de SQL*Plus:
SQL*Plus:
SQL> INSERT INTO
2 VALUES
3
dept (deptno, dname, loc)
(&department_id,
'&department_name', '&location');
Enter value for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA
1 row created.
9-10
Copyright  Oracle Corporation, 1998. All rights reserved.
Creación de un Script con
PROMPTS Específicos
•• ACCEPT
ACCEPT almacena
almacena el
el valor
valor en
en una
una var.
var.
•• PROMPT
PROMPT visualiza
visualiza el
el texto
texto especificado.
especificado.
ACCEPT
ACCEPT
ACCEPT
INSERT INTO
VALUES
9-11
department_id PROMPT 'Please enter the department number:'
department_name PROMPT 'Please enter the department name:'
location PROMPT 'Please enter the location:'
dept (deptno, dname, loc)
(&department_id, '&department_name',
&location);
Copyright  Oracle Corporation, 1998. All rights reserved.
Copiando Registros de Otra Tabla
•
Escribir el comando INSERT con una
subconsulta (subquery).
SQL> INSERT INTO managers(id, name, salary, hiredate)
2
SELECT empno, ename, sal, hiredate
3
FROM
emp
4
WHERE job = 'MANAGER';
3 rows created.
•
•
9-12
No usar la cláusula VALUES.
Observar que coincida el número de
columnas en la cláusula INSERT con las
de la subconsulta.
Copyright  Oracle Corporation, 1998. All rights reserved.
Modificación de Datos en una Tabla
EMP
EMPNO ENAME
7839
7698
7782
7566
...
KING
BLAKE
CLARK
JONES
JOB
...
DEPTNO
PRESIDENT
MANAGER
MANAGER
MANAGER
10
30
10
20
“…Modificación de
un registro en la
Tabla EMP…”
EMP
EMPNO ENAME
7839
7698
7782
7566
...
9-13
KING
BLAKE
CLARK
JONES
JOB
PRESIDENT
MANAGER
MANAGER
MANAGER
Copyright  Oracle Corporation, 1998. All rights reserved.
...
DEPTNO
10
30
20
10
20
La Sentencia UPDATE
•• Modificamos
Modificamos registros
registros existentes
existentes con
con la
la
sentencia
sentencia UPDATE
UPDATE
UPDATE
UPDATE
SET
SET
[WHERE
[WHERE
table
table
column
column == value
value [,
[, column
column == value]
value]
condition];
condition];
•• Puede
Puede afectar
afectar aa más
más de
de un
un registro
registro al
al
mismo
mismo tiempo.
tiempo.
9-14
Copyright  Oracle Corporation, 1998. All rights reserved.
Modificación de Registros en una Tabla
•• Los
Los registros
registros aa modificar
modificar se
se especifican
especifican por
por
medio
medio de
de la
la cláusula
cláusula WHERE
WHERE
SQL> UPDATE emp
2 SET
deptno = 20
3 WHERE
empno = 7782;
1 row updated.
•• Si
Si se
se omite
omite la
la cláusula
cláusula WHERE
WHERE se
se
modificarían
modificarían todos
todos los
los registros
registros de
de la
la tabla.
tabla.
SQL>
SQL> UPDATE
UPDATE employee
employee
22 SET
deptno
SET
deptno == 20;
20;
14
14 rows
rows updated.
updated.
9-15
Copyright  Oracle Corporation, 1998. All rights reserved.
Proceso de Modificación con
Subconsultas Multi-Columna
Modificar
Modificar el
el oficio
oficio yy departamento
departamento del
del
empleado
empleado 7698,
7698, con
con los
los valores
valores
correspondientes
correspondientes actualmente
actualmente al
al empleado
empleado
7499:
7499:
SQL> UPDATE emp
2 SET
(job, deptno) =
3
(SELECT job, deptno
4
FROM
emp
5
WHERE
empno = 7499)
6 WHERE
empno = 7698;
1 row updated.
9-16
Copyright  Oracle Corporation, 1998. All rights reserved.
Modificación de Registros
Basados en Otra Tabla
Utilice
Utilice subconsultas
subconsultas en
en sentencias
sentencias
UPDATE,
UPDATE, para
para modificar
modificar registros
registros de
de una
una
tabla,
tabla, basados
basados en
en valores
valores de
de otra
otra tabla.
tabla.
SQL>
SQL> UPDATE
UPDATE employee
employee
22 SET
deptno
SET
deptno == (SELECT
(SELECT
33
FROM
FROM
44
WHERE
WHERE
55 WHERE
job
== (SELECT
WHERE
job
(SELECT
66
FROM
FROM
77
WHERE
WHERE
22 rows
rows updated.
updated.
9-17
deptno
deptno
emp
emp
empno
empno ==
job
job
emp
emp
empno
empno ==
Copyright  Oracle Corporation, 1998. All rights reserved.
7788)
7788)
7788);
7788);
Modificación de Registros:
Error de Integridad (Constraints)
ee
t
t
s
iis
== 55
x
55
x
ee
== 10;
o
10;
o
n
n
5555
o
eerro
m
m
ú
ú
nn
o
tto
UPDATE
UPDATE emp
emp
n
n
ee
**
m
m
a
a
t
ERROR
at
line
1:
t
rr
ERROR at line 1:
a
a
pp
ORA-02291:
constraint
ORA-02291: integrity
integrity
constraint (USR.EMP_DEPTNO_FK)
(USR.EMP_DEPTNO_FK)
e
e
D
D
violated
violated -llparent
parent key
key not
not found
found
EE
SQL>
SQL>
22
33
9-18
UPDATE
UPDATE
SET
SET
WHERE
WHERE
emp
emp
deptno
deptno
deptno
deptno
Copyright  Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros de una Tabla
DEPT
DEPTNO
-----10
20
30
40
50
60
...
9-19
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
DEVELOPMENT DETROIT
MIS
“…Borramos un
registro de la tabla
DEPT…”
DEPT
DEPTNO
-----10
20
30
40
60
...
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
MIS
Copyright  Oracle Corporation, 1998. All rights reserved.
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
La Sentencia DELETE
Puede
Puede eliminar
eliminar registros
registros existentes
existentes de
de
una
una tabla,
tabla, por
por medio
medio de
de la
la sentencia
sentencia
DELETE.
DELETE.
DELETE
DELETE [FROM]
[FROM]
[WHERE
[WHERE
9-20
table
table
condition];
condition];
Copyright  Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros de una Tabla
•• Los
Los registros
registros aa eliminar
eliminar se
se especifican
especifican
por
por medio
medio de
de la
la cláusula
cláusula WHERE
WHERE
SQL>
SQL> DELETE
DELETE FROM
FROM
22 WHERE
WHERE
11 row
row deleted.
deleted.
department
department
dname
dname == 'DEVELOPMENT';
'DEVELOPMENT';
•• Si
Si omite
omite la
la cláusula
cláusula WHERE
WHERE se
se borrarán
borrarán
todos
todos los
los registros
registros de
de la
la tabla
tabla
SQL>
SQL> DELETE
DELETE FROM
FROM
44 rows
rows deleted.
deleted.
9-21
department;
department;
Copyright  Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros
Basados en Otra Tabla
Utilice
Utilice subconsultas
subconsultas en
en sentencias
sentencias
DELETE,
DELETE, para
para eliminar
eliminar registros
registros de
de una
una
tabla,
tabla, basados
basados en
en valores
valores de
de otra
otra tabla.
tabla.
SQL> DELETE FROM
2 WHERE
3
4
5
6 rows deleted.
9-22
employee
deptno =
(SELECT
FROM
WHERE
deptno
dept
dname ='SALES');
Copyright  Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros:
Error de Integridad (Constraints)
ee aa
n
n
iiee errnn
t
t
nn xxtte
SQL>
dept
o
SQL> DELETE
DELETE FROM
FROM
dept
o
cc e ee
22 WHERE
deptno
=
10;
e
e vve
WHERE
deptno = 10; u
u
q
llaa
q
c
o
c
rro oo
t
t
s
iis om
m
g
g
o
e
c
rre aa c
DELETE
DELETE FROM
FROM dept
dept
n
n aadd
u
u
**
rr uss
a
a
n
ERROR
ERROR at
at line
line 1:
1: iin iaa,, u
i
m
m aarconstraint
i
r
i
ORA-02292:
(USR.EMP_DEPTNO_FK)
l
l
ORA-02292: integrity
integrity
constraint
(USR.EMP_DEPTNO_FK)
e
e
m
iim
ee rrecord
violated
found
violated --echild
child
record
found
r
d
d
p
p
e
ppuu laavvee bbllaa
NNoo aa ccl a ttaa
uunn oottrra
eenn
9-23
Copyright  Oracle Corporation, 1998. All rights reserved.
Transacciones en la Base de Datos
Contienen
Contienen una
una de
de las
las siguientes
siguientes sentencias:
sentencias:
•• Sentencias
Sentencias DML
DML que
que deciden
deciden un
un cambio
cambio
consistente
consistente sobre
sobre los
los datos
datos
•• Una
Una sentencia
sentencia DDL
DDL
•• Una
Una sentencia
sentencia DCL
DCL
9-24
Copyright  Oracle Corporation, 1998. All rights reserved.
Transacciones en la Base de Datos
•
•
Comienzan
Comienzan cuando
cuando se
se ejecuta
ejecuta el
el
primer
primer comando
comando SQL.
SQL.
Finalizan
Finalizan con
con uno
uno de
de los
los siguientes
siguientes
eventos:
eventos:
–– COMMIT
COMMIT o
o ROLLBACK.
ROLLBACK.
––
––
9-25
Ejecución
Ejecución de
de un
un comando
comando DDL
DDL o
o
DCL
DCL (commit
(commit automático).
automático).
Errores,
Errores, salida
salida o
o caída
caída del
del sistema.
sistema.
Copyright  Oracle Corporation, 1998. All rights reserved.
Ventajas de
COMMIT y ROLLBACK
•
•
Aseguran la consistencia de los datos.
•
Agrupan lógicamente tareas
relacionadas entre sí.
9-26
Pueden visualizar los cambios sobre los
datos antes de hacerlos permanentes.
Copyright  Oracle Corporation, 1998. All rights reserved.
Control de Transacciones
Transacci
ón
Transacción
INSERT
COMMIT
UPDATE
Savepoint A
INSERT
DELETE
Savepoint B
ROLLBACK to Savepoint B
ROLLBACK to Savepoint A
ROLLBACK
9-27
Copyright  Oracle Corporation, 1998. All rights reserved.
Proceso Implícito de Transacciones
•
Un commit automático ocurre bajo una de las
siguientes circunstancias:
– Se emite un comando DDL, tal como
CREATE.
– Se emite un comando DCL, tal como
GRANT.
– Una salida normal desde SQL*Plus, sin
realizar un COMMIT o ROLLBACK
explícitamente.
•
9-28
Un rollback automático ocurre bajo una
terminación anormal de SQL*Plus o una falla
del sistema.
Copyright  Oracle Corporation, 1998. All rights reserved.
Estado de los Datos Antes de
COMMIT o ROLLBACK
•
El estado previo de los datos puede ser
recuperado porque el afectado es el búfer de la
base de datos.
•
El usuario actual puede revisar los resultados
de sus operaciones DML usando la sentencia
SELECT.
•
Otros usuarios no pueden ver los resultados
de las sentencias DML ejecutadas por el
usuario actual.
•
Las filas afectadas son bloqueadas (locked);
otros usuarios no pueden cambiar los datos
pertenecientes a esas filas.
9-29
Copyright  Oracle Corporation, 1998. All rights reserved.
Estado de los Datos
Después del COMMIT
•
Los cambios en los datos son escritos en la
base de datos.
•
Los datos anteriores se pierden
definitivamente.
•
•
Todos los usuarios pueden ver los resultados.
•
Se borran todos los savepoints.
9-30
Se liberan los bloqueos aplicados a las filas
afectadas; esas filas están ahora disponibles
para que otros usuarios las usen.
Copyright  Oracle Corporation, 1998. All rights reserved.
Commit de Datos
•• Realizar
Realizar los
los cambios:
cambios:
SQL>
SQL> UPDATE
UPDATE emp
emp
22 SET
deptno
SET
deptno == 10
10
33 WHERE
empno
WHERE
empno == 7782;
7782;
11 row
row updated.
updated.
•• Hacer
Hacer Commit
Commit de
de los
los cambios:
cambios:
SQL> COMMIT;
Commit complete.
9-31
Copyright  Oracle Corporation, 1998. All rights reserved.
Estado de los Datos
Después de Hacer ROLLBACK
•
•
•
•
Se descartan todos los cambios pendientes.
Los cambios en los datos se deshacen.
Se restaura el estado previo de los datos.
Se levantan todos los bloqueos sobre las filas
afectadas.
SQL> DELETE FROM
14 rows deleted.
SQL> ROLLBACK;
Rollback complete.
9-32
employee;
Copyright  Oracle Corporation, 1998. All rights reserved.
Hacer ROLLBACK
Hasta un Punto de Salvaguarda (Marca)
•
Crear una marca dentro de una transacción
usando el comando SAVEPOINT (marca).
•
Hacer un rollback hacia la marca usando el
comando ROLLBACK TO SAVEPOINT.
SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.
9-33
Copyright  Oracle Corporation, 1998. All rights reserved.
Rollback a Nivel de Sentencia
•
Si una única sentencia DML falla
durante su ejecución, entonces se hace
rollback sobre esa sentencia solamente.
•
Oracle8 implementa una marca de
seguridad o savepoint implícito.
•
•
Todos los otros cambios se mantienen.
9-34
El usuario debería terminar
explícitamente las transacciones
usando una sentencia COMMIT o
ROLLBACK.
Copyright  Oracle Corporation, 1998. All rights reserved.
Consistencia en Lectura
•• La
La consistencia
consistencia en
en lectura
lectura garantiza
garantiza una
una
vista
vista consistente
consistente de
de los
los datos
datos en
en
cualquier
cualquier circunstancia.
circunstancia.
•• Los
Los cambios
cambios realizados
realizados por
por otro
otro
usuario
usuario no
no crean
crean conflictos
conflictos con
con los
los
cambios
cambios realizados
realizados por
por otro
otro usuario.
usuario.
•• Asegura
Asegura que
que sobre
sobre los
los mismos
mismos datos:
datos:
–– Las
Las lecturas
lecturas no
no esperan
esperan aa las
las
escrituras
escrituras yy viceversa.
viceversa.
9-35
Copyright  Oracle Corporation, 1998. All rights reserved.
Implementación de la
Consistencia en Lectura
Bloques
de Datos
update emp
set sal = 2000
where ename =
'SCOTT'
Segmentos
de Rollbck
Usuario A
select *
from emp
Imagen
Consistente
en Lectura
Usuario B
9-36
Copyright  Oracle Corporation, 1998. All rights reserved.
Datos
cambiados y
no cambiados
Antes de
cambiar los
datos
“antiguos”
Bloqueos
Bloqueos
Bloqueos en
en Oracle8:
Oracle8:
•• Previenen
Previenen la
la intereacción
intereacción destructiva
destructiva entre
entre
transacciones
transacciones concurrentes
concurrentes
•• No
No requieren
requieren acciones
acciones por
por parte
parte del
del usuario
usuario
•• Automáticamente
Automáticamente utilizan
utilizan el
el nivel
nivel más
más bajo
bajo
de
de restricción
restricción
•• Se
Se mantienen
mantienen mientras
mientras dura
dura la
la transacción
transacción
•• Tienen
Tienen básicamente
básicamente dos
dos modos:
modos:
–– Exclusive
Exclusive (exclusivos)
(exclusivos)
–– Shared
Shared (compartidos)
(compartidos)
9-37
Copyright  Oracle Corporation, 1998. All rights reserved.
Resumen
Comando
Descripción
INSERT
Agrega una fila nueva a la tabla.
UPDATE
Modifica filas de una tabla.
DELETE
Elimina filas de una tabla.
COMMIT
Hace permanentes todos los cambios
pendientes.
SAVEPOINT
Permite hacer un rollback hasta la marca de
savepoint.
ROLLBACK
Descarta todos los cambios pendientes de los
datos.
9-38
Copyright  Oracle Corporation, 1998. All rights reserved.
Visión General de la Práctica
•
•
•
9-39
Insertar filas en tablas.
Actualizar y eliminar filas en tablas.
Controlar transacciones.
Copyright  Oracle Corporation, 1998. All rights reserved.
Descargar