4D v16

CREATE VIEW

Página Inicial

 
4D v16
CREATE VIEW

CREATE VIEW  


 

 

CREATE [OR REPLACE] VIEW [schema_name.]view_name [(column_list)] AS select_statement[;]

O comando CREATE VIEW permite criar uma vista SQL chamada nom_vista (que é um nom_sql estandarte) que contém as colunas definidas no parâmetro lista_colunas. É necessário especificar um nome de coluna se esta coluna é uma função ou se deriva de uma operação aritmética (escalar). Também é necessário especificar um nome de coluna quando se quer evitar ter diferentes colunas com o mesmo nome (por exemplo, durante uma operação JOIN) ou quando deseja utilizar um nome de coluna diferente do que se deriva.

Se passar o parâmetro lista_colunas, deve conter o mesmo número de colunas como na petição de definição instruccion_select da vista. Se omitir lista_colunas, as colunas da vista terão os
mesmos nomes que os das colunas da instruccion_select da vista.

As vistas e as tabelas devem ter nomes únicos.

Se passar a opção OR REPLACE, a vista será recriada automaticamente caso já exista. Esta opção pode ser útil com o propósito de mudar a definição de uma vista existente sem ter que apagar/criar/afetar os privilégios dos objetos que já estão definidos para a vista atual.

Se não passar a opção OR REPLACE, e se a vista já existe, se devolve um erro.

nom_schema é também um nom_sql estandarte e pode ser utilizado para designar o nome do esquema que conterá a vista. Se não passar nom_schema ou se passar o nome de um esquema que não existe, a vista se atribui automaticamente ao esquema por padrão, chamado "DEFAULT_SCHEMA".

Instruccion_select designa a instrução SELECT que é a consulta de definição da vista. A Instruccion_select é a mesma que um SELECT estandarte de 4D, mas com as seguintes restrições:

  • Não pode utilizar as cláusulas INTO, LIMIT ou OFFSET pela limitação, a definição ou a atribuição das variáveis em 4D será levada a cabo pela instrução MissingRef que chama a vista.
  • Não pode utilizar a cláusula GROUP BY.
  • As vistas são somente de leitura e não podem ser atualizadas.

Uma definição de vista é "estática" e não se atualiza se as tabelas fontes se modificam ou eliminam. Particularmente, as colunas adicionadas a uma tabela não aparecem na vista baseada nesta tabela. Do mesmo modo, se trata de acessar por meio de uma vista as colunas eliminadas, se produz um erro.

No entanto, uma vista que se refere a uma vista fonte eliminada seguirá funcionando. De fato, quando é criada uma vista, converte qualquer referência de vistas em referências as tabelas fonte. 

As vistas tem um alcance global. Uma vez que é criada uma vista com CREATE VIEW, é acessível para todas as partes da aplicação (4D remoto sob SQL, bases externas criadas com o comando CREATE DATABASE, outras bases utilizam o comando SQL LOGIN, etc.) e em qualquer momento até que se apaga utilizando o comando DROP VIEW.

Exemplo  

Aqui apresentamos alguns exemplos de definições de vista baseados na tabela PEOPLE que contém as seguintes colunas:

IDINT64
NOMEVARCHAR(30)
SOBRENOMEVARCHAR(30)
DEPARTAMENTOVARCHAR(30)
SALÁRIOINT

Uma vista sem restrições:

CREATE VIEW FULLVIEW AS
        SELECT * FROM PERSONS;

Uma vista sem restrições: "horizontais". Por exemplo, você quer mostrar unicamente as pessoas que trabalham no departamento de Marketing:

CREATE VIEW HORIZONTALVIEW (ID, Nome, Sobrenome, Salário) AS
        SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM PERSONS
        WHERE DEPARTMENT = 'Marketing';

Uma vista agregada:

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

Uma vista com restrições "verticais". Por exemplo, você não quer mostrar a coluna SALARY:

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

Uma vez definidas as vistas, pode utilizar elas como tabelas estandarte. Por exemplo, se quer obter todas as pessoas cujo salário é maior a 5,000 Euros:

SELECT * FROM FULLVIEW
    WHERE SALARY < 5000
    INTO :aID, :aNome, :aSobrenome, :aDepartamento, :aSalário;

Outro exemplo: você quer obter todas as pessoas do departamento de Marketing cujo nome é "Miguel":

SELECT ID, Sobrenome, Salary FROM HORIZONTALVIEW
    WHERE Nome='Miguel'
    INTO :aID, :aSobrenome, :aSalary;



Ver também 

DROP VIEW

 
PROPRIEDADES 

Produto: 4D
Tema: Comandos SQL

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)