Unidad 8. El DDL, Lenguaje de Definición de Datos (XIV)


Ejemplos:


    CREATE VIEW oficinas_este

      AS SELECT * FROM oficinas WHERE region =  ‘Este’;  

Crea una vista con las oficinas del este.


    CREATE VIEW oficinas_empleados

      AS 

      SELECT oficinas.oficina AS ofi, ciudad, dir,  region, objetivo, oficinas.ventas AS ventas_ofi, empleados.*

      FROM oficinas INNER JOIN empleados

              ON oficinas.oficina = empleados.oficina;  

Crea una vista con los datos de todos los empleados y de sus oficinas.
En este caso hemos tenido que definir alias de campo porque en el origen de la sentencia SELECT existe duplicidad de nombres.


    CREATE VIEW oficinas_EO

      AS 

      SELECT * FROM oficinas WHERE region = ‘Este’;

      UNION ALL

      SELECT * FROM oficinas WHERE region = ‘Oeste’;  

Por defecto las columnas de la vista heredan los nombres de las columnas de la sentencia SELECT asociada, pero podemos cambiar estos nombres indicando una lista de columnas después del nombre de la vista.


    CREATE VIEW oficinas_este (Eoficina,  Eciudad, Eregion, Edir, Eobjetivo,Eventas)

      AS SELECT * FROM oficinas WHERE region = ‘Este’;  

Utilizando una lista de columnas ya no tenemos que definir alias de columna en la sentencia SELECT como pasaba en el caso de la vista oficinas_empleados.

Normalmente se utiliza la lista de columnas cuando una columna proviene de una expresión aritmética, una función o una constante; cuando dos o más columnas puedan tener el mismo nombre, normalmente debido a una combinación; o cuando una columna de una vista recibe un nombre distinto al de la columna de la que proviene.

En definitiva se puede optar por utilizar la lista de columnas o definir alias de campo en la sentencia SELECT.

Cuando utilizamos una vista en una operación de actualización (INSERT, UPDATE, DELETE), la vista debe ser actualizable, para ello debe seguir las siguientes reglas:

Cualquier modificación, incluida en las instrucciones UPDATE, INSERT y DELETE, debe hacer referencia a las columnas de una única tabla base.

Las columnas que se vayan a modificar en la vista deben hacer referencia directa a los datos subyacentes de las columnas de la tabla, es decir que las columnas no se pueden obtener de otra forma, como con una función de agregado: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR y VARP, o un cálculo.

Las columnas formadas mediante los operadores de conjunto UNION, UNION ALL, CROSSJOIN, EXCEPT e INTERSECT equivalen a un cálculo y tampoco son actualizables.

Las columnas que se van a modificar no se ven afectadas por las cláusulas GROUP BY, HAVING o DISTINCT.

Las restricciones anteriores se aplican a cualquier subconsulta de la cláusula FROM de la vista, al igual que a la propia vista. Normalmente, el Database Engine (Motor de base de datos) debe poder realizar un seguimiento sin ambigüedades de las modificaciones de la definición de la vista a una tabla base.

8.9. Eliminar una vista DROP VIEW

Para eliminar una vista de una base de datos tenemos la sentencia DROP TABLE.
Sintaxis:


    DROP VIEW [nbEsquema.]nbVista[ ,...n ] [ ; ]  

Se eliminan las vista de la base de datos actual. Cuando eliminamos una vista eliminamos su definición y los permisos asociados a ella.

Se pueden quitar varias vistas en una misma sentencia DROP VIEW escribiendo los nombres de las vistas a eliminar separados por comas.

Para ejecutar DROP VIEW, como mínimo, se necesita el permiso ALTER en SCHEMA o el permiso CONTROL en OBJECT.

Ejemplo:


    DROP VIEW oficinas_este, oficinas_EO;

  

Elimina las vistas oficinas_este y oficinas_EO.

Si eliminamos una tabla mediante DROP TABLE, se deben quitar explícitamente, con DROP VIEW, las vistas basadas en esta tabla ya que no se quitarán por sí solas.

Febrero-2010
Pág. 8.14

Atrás  Inicio  Adelante



.