Está en la página 1de 25

UD 7: Vistas, ndices,

Secuencias y Sinnimos

Flix Reyes Fernndez

Motivos:

Restringe el acceso a la base de datos porque las vistas


pueden mostrar una porcin selectiva de la base de datos.
Para hacer consultas complejas de manera ms cmoda.
Para permitir la independencia de datos con respecto a
aplicaciones (lo estudiamos en teora cuando veamos la
arquitectura de un SGBD)
Para presentar los mismos datos con distintas
visualizaciones.
Provee el acceso a grupos de usuarios segn sus criterios y
necesidades

Sintaxis
CREATE VIEW nombre vista
AS consulta select
[WITH CHECK OPTION [CONSTRAINT
nombre restriccin]]
[WITH READ ONLY];

[WITH CHECK OPTION [CONSTRAINT nombre restriccin]]: especifica que solo


las filas que cumplen los criterios de la vista pueden insertarse o actualizarse
[WITH READ ONLY] asegura que no puedan ejecutarse sentencias DML en la
vista.

Ejercicio: Crea una vista, EMPVU30, que contiene


detalles de los empleados del departamento 30
CREATE [OR REPLACE] VIEW EMPVU30
AS SELECT employee_id, first_name
FROM employees
WHERE department_id=30;

La vista se almacena en el Diccionario de Datos


(USER_VIEWS)
La subconsulta puede contener complejas
sentencias SELECT
Si no especificas un nombre de restriccin para la
vista creada con la opcin CHECK OPTION, el
sistema asignar un nombre por defecto con el
formato SYS_Cn

Usando WITH CHECK OPTION


CREATE VIEW empvu30
AS SELECT *
FROM employees
WHERE department_id=30
WITH CHECK OPTION;

UPDATE empvu30
SET department_id=10
WHERE employee_id=117;
Error de restriccin CHECK

Usando WITH CHECK OPTION


Con la clusula "with check option", no se permiten
modificaciones en aquellos campos que afecten a
los registros que retorna la vista. Es decir, no
podemos modificar el campo department_id"
porque al hacerlo, tal registro ya no aparecera en
la vista; si podemos actualizar los dems campos.
La misma restriccin surge al ejecutar un "insert"
sobre la vista; solamente podemos ingregar
registros con el valor 30" para department_id.

Usando WITH READ ONLY


CREATE OR REPLACE VIEW empvu30
AS SELECT *
FROM employees
WHERE department_id=30
WITH READ ONLY;

DELETE FROM empvu30


WHERE employee_id=117;

DELETE FROM empvu30


ERROR at line 1:
ORA-01752:Cannot delete from view without exactly
one key-preserved table

Generar nmeros secuenciales automticamente


para filas en tablas
Uso tpico: crear valores de claves primarias, que
deben ser nicos para cada fila. La secuencia es
generada e incrementada (o decrementada) por una
rutina interna Ahorro de tiempo
Los nmeros de secuencia son almacenados y
generados de manera independiente a las tablas.
La misma secuencia puede ser usada por mltiples
tablas.

Sintaxis
CREATE SEQUENCE nombre_secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}];

[INCREMENT BY n]: especifica el tamao del intervalo. Si se omite se


toma 1
[START WITH n]: especifica el primer nmero de la secuencia. Si se
omite, la secuencia empezar con el valor 1.
[{MAXVALUE n | NOMAXVALUE}]: especifica el valor mximo que
puede alcanzar la secuencia. Si se pone nomaxvalue sera por
defecto 10^27 para secuencias ascendentes y -1 para secuencias
descendentes
[{MINVALUE n | NOMINVALUE}]: especifica el valor mnimo de una
secuencia. Si se pone nominvalue sera por defecto -10^27 para
secuencias descendentes y 1 para secuencias ascendentes.
[{CYCLE | NOCYCLE}]: si supera los valores mximos, que comience
el ciclo desde el principio

Ejercicio: Crear una secuencia llamada dept_sec


para usarse en la columna department_id de la
tabla departments. La secuencia comenzar con 91,
y terminar en 100
CREATE SEQUENCE dept_sec
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCYCLE;

No usar CYCLE a menos que se sepa que las


primeras filas van a ser borradas para sustituirlas
antes de dar una vuelta a los registros.
Secuencias Diccionario Datos
SELECT sequence_name, min_value,
max_value, increment_by, last_number
FROM user_sequences;

Pseudocolumnas NEXTVAL y CURRVAL


nombre_secuencia.NEXTVAL|CURRVAL
Ejercicio: Insertar el departamento de marketing en Sn Fdo.
Usando NEXTVAL
INSERT INTO dept(deptno, dname, loc)
VALUES (dept_sec.NEXTVAL, Marketing,
San Fdo);

Para ver el valor actual de la secuencia


SELECT dept_sec.CURRVAL
FROM dual;

Modificar secuencias
ALTER SEQUENCE nombre_secuencia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]

Solo afectar a los futuros nmeros incluidos


Para utilizarla completamente, debe ser borrada y recreada
para comenzar la secuencia con un nmero diferente.

Ejemplo: Qu ocurrira si el valor actual de la


secuencia fuese 100?
ALTER SEQUENCE dept_sec
INCREMENT BY 1
MAXVALUE 90
NOCYCLE

Borrar secuencias
DROP SEQUENCE nombre_secuencia;

Objeto usado por Oracle para aumentar la


velocidad de la recuperacin de filas usando un
puntero.
Reduce operaciones de entrada y salida usando un
mtodo de rpido acceso que permite localizar los
datos de forma rpida, siendo independiente de la
tabla que apunta, con lo que pueden ser creados o
borrados en cualquier momento sin que afecte a
las tablas a las que apunta.
Es automticamente usado y mantenido por
Oracle.

PRIMARY KEY o UNIQUE KEYCreacin automtica


Manualmente: Los usuarios pueden crear ndices
no nicos en columnas para acelerar el tiempo de
acceso a las filas.
CREATE INDEX nombre_indice
ON TABLE (column, [column.);

Ejemplo: Aumenta la velocidad de acceso de


consulta en la columna first_name de la tabla
Employees.

Ejemplo: Aumenta la velocidad de acceso de


consulta en la columna first_name de la tabla
Employees.
CREATE INDEX emp_ename_idx
ON employees(first_name);

Conveniente

No Conveniente

Columna usada frecuentemente en


WHERE

Si las columnas no se usan en WHERE

Columna contiene un amplio rango de


valores

La tabla es actualizada frecuentemente

Tabla grande y la mayora de las


consultas esperadas devuelven menos de
un 2-4% de las filas

Tabla pequea y mayora de las


consultas esperadas devuelven ms de
un 2-4% de las filas

Dos o ms columnas se usan mucho


para unir dos tablas
Contiene un elevado nmero de valores
nulos

Consulta de ndices
SELECT
ic.index_name,
ic.column_name,
ic.column_position col_pos, ix.uiqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name=ix.index_name
AND ic.table_name=nombre tabla;

Borrado de ndices
DROP INDEX nombre_ndice;

Simplificar el acceso a un objeto de la base de datos.


CREATE [PUBLIC] SYNONYM sinnimo
FOR objeto;

Ejemplo: Crear un sinnimo publico accesible a todos los


usuarios de la tabla dept de la base de datos Alicia
CREATE PUBLIC SYNONYM dept
FOR Alicia.dept;

Borrar sinnimos
DROP SYNONYM dept;

También podría gustarte