4D v16

CREATE VIEW

Inicio

 
4D v16
CREATE VIEW

CREATE VIEW  


 

 

CREATE [OR REPLACE] VIEW [nom_schema.]nom_vista[(lista_columnas)] AS instruccion_select[;]

El comando CREATE VIEW  permite crear una vista SQL llamada nom_vista (que es un nom_sql estándar) que contiene las columnas definidas en el parámetro lista_columnas. Es necesario especificar un nombre de columna si esta columna es una función o se deriva de una operación aritmética (escalar). También es necesario especificar un nombre de columna cuando se quiere evitar tener distintas columnas con el mismo nombre (por ejemplo, durante una operación JOIN) o cuando desea utilizar un nombre de columna diferente del que se deriva.

Si se pasa el parámetro lista_columnas, debe contener el mismo número de columnas como en la petición de definición instruccion_select de la vista. Si se omite lista_columnas, las columnas de la vista tendrán los
mismos nombres que los de las columnas de la instruccion_select de la vista.

Las vistas y las tablas deben tener nombres únicos.

Si pasa la opción OR REPLACE, la vista se recreará automáticamente si ya existe. Esta opción puede ser útil con el fin de cambiar la definición de una vista existente sin tener que borrar/crear/afectar los privilegios
de los objetos que ya están definidos para la vista actual.

Si no se pasa la opción OR REPLACE, y si la vista ya existe, se devuelve un error.

nom_schema es también un nom_sql estándar y puede utilizarlo para designar el nombre del esquema que contendrá la vista. Si no pasa nom_schema o si pasa el nombre de un esquema que no existe, la vista
se asigna automáticamente al esquema por defecto, llamado "DEFAULT_SCHEMA".

Instruccion_select designa la instrucción SELECT que es la consulta de definición de la vista. La Instruccion_select es la misma que un SELECT estándar de 4D, pero con las siguientes restricciones:

  • No puede utilizar las cláusulas INTO, LIMIT u OFFSET ya que la limitación, definición o asignación de variables en 4D será realizada por MissingRef que llama a la vista.
  • No puede utilizar la cláusula GROUP BY.
  • Las vistas son de sólo lectura y no se pueden actualizar.

Una definición de vista es "estática" y no se actualiza si las tablas fuentes se modifican o eliminan. En particular, las columnas añadidas a una tabla no aparecen en la vista basada en esta tabla. Del mismo
modo, si trata de acceder por medio de una vista a las columnas eliminadas, se produce un error.

Sin embargo, una vista que refiera a una vista fuente eliminada seguirá funcionando. De hecho, cuando se crea una vista, convierte cualquier referencia de vistas en referencias a las tablas fuente. 

Las vistas tienen un alcance global. Una vez que se crea una vista con CREATE VIEW, es accesible para todas las partes de la aplicación (4D remoto vía SQL, bases externas creadas con el comando CREATE DATABASE, otras bases utilizan el comando SQL LOGIN, etc.) y durante la sesión, hasta que se borra utilizando el comando DROP VIEW o se cierre la base.

Ejemplo  

Aquí presentamos algunos ejemplos de definiciones de vista basados en la tabla PEOPLE que contiene las siguientes columnas:

IDINT64
NOMBREVARCHAR(30)
APELLIDOVARCHAR(30)
DEPARTAMENTOVARCHAR(30)
SALARIOINT

Una vista sin restricciones:

CREATE VIEW FULLVIEW AS
        SELECT * FROM PERSONS;

Una vista sin restricciones: "horizontales". Por example, usted quiere mostrar únicamente las personas que trabajan en el departamento de Mercadeo:

CREATE VIEW HORIZONTALVIEW (ID, Nombre, Apellido, Salario) AS
        SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM PERSONS
        WHERE DEPARTMENT = 'Marketing';

Una vista agregada:

CREATE VIEW AGGREGATEVIEW (Nombre, Apellido AnnualSalary) AS
        SELECT Nombre, Apellido, SALARY*12 FROM PERSONS;

Una vista con restricciones "verticales". Por ejemplo, usted no quiere mostrar la columna SALARY:

CREATE VIEW VERTICALVIEW (ID, Nombre, Apellido, Departamento) AS
        SELECT ID, FIRST_NAME, LAST_NAME, DEPARTEMENT FROM PERSONS;

Una vez definidas las vista, puede utilizarlas como tablas estándar. Por ejemplo, si quiere obtener todas las personas cuyo salario es mayor a 5,000 Euros:

SELECT * FROM FULLVIEW
    WHERE SALARY < 5000
    INTO :aID, :aNombre, :aApellido, :aDepartamento, :aSalario;

Otro ejemplo: usted quiere obtener todas las personas del departamento de Mercadeo cuyo nombre es "Miguel":

SELECT ID, Apellido, Salary FROM HORIZONTALVIEW
    WHERE Nombre='Miguel'
    INTO :aID, :aApellido, :aSalary;



Ver también 

DROP VIEW

 
PROPIEDADES 

Producto: 4D
Tema: Comandos SQL

 
HISTORIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)