Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear la vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados en las tablas. Por todo ello, las vistas gastan muy poco espacio de disco.
Las vistas se emplean para:
Hay dos tipos de vistas:
Sintaxis:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW vista [(alias[, alias2...])] AS consultaSELECT
[WITH CHECK OPTION [CONSTRAINT restricción]] [WITH READ ONLY [CONSTRAINT restricción]] |
Los distintos elementos de la sintaxis de la instrucción son:
Lo bueno de las vistas es que tras su creación se utilizan como si fueran una tabla.
Ejemplo:
CREATE VIEW resumen -- alias
(id_localidad, localidad, poblacion, n_provincia, provincia,superficie, capital_provincia, id_comunidad, comunidad, capital_comunidad) AS
( SELECT l.id_localidad, l.nombre, l.poblacion,
n_provincia, p.nombre, p.superficie, l2.nombre, id_comunidad, c.nombre, l3.nombre FROM localidades l
JOIN provincias p USING (n_provincia)
JOIN comunidades c USING (id_comunidad)
JOIN localidades l2 ON (p.id_capital=l2.id_localidad) JOIN localidades l3 ON (c.id_capital=l3.id_localidad) );
SELECT DISTINCT (comunidad, capital_comunidad)
FROM resumen; /* La vista pasa a utilizarse como si fuera una tabla normal*/
|
La creación de la vista del ejemplo es compleja ya que hay relaciones complicadas, pero una vez creada la vista, se le pueden hacer consultas como si se tratara de una tabla normal. Incluso se puede utilizar el comando DESCRIBE sobre la vista para mostrar la estructura de los campos que forman la vista o utilizarse como subconsulta en los comandos UPDATE o DELETE.
Las instrucciones DML (INSERT, UPDATE o DELETE) se pueden ejecutar sobre las vistas simples.
En el caso de las vistas complejas, se pueden borrar filas si la vista:
Además no se pueden modificar los datos si hay columnas que utilizan expresiones o funciones (por muy simples que fueran estas).
Para añadir datos (instrucción INSERT) además hay que cumplir que todos los campos con restricciones de tipo NOT NUL de las tablas están incluidos.
En todo caso, la cláusula WITH READ ONLY comentada anteriormente prohíbe cualquier instrucción DML sobre la vista.
La vista del diccionario de datos de Oracle USER_VIEWS permite mostrar una lista de todas las vistas que posee el usuario actual. Es decir, para saber qué vistas hay disponibles se usa:
SELECT * FROM USER_VIEWS; |
La columna TEXT de esa vista contiene la sentencia SQL que se utilizó para crear la vista (sentencia que es ejecutada cada vez que se invoca a la vista).
Para ello se utiliza el comando DROP VIEW:
DROP VIEW nombreDeVista; |