CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW nome [ ( nome_da_coluna [, ...] ) ] AS comando
O comando CREATE VIEW define a visão de um comando. A visão não é materializada fisicamente. Em vez disso, o comando é executado toda vez que a visão é referenciada em um comando. [1] [2] [3] [4] [5] [6]
O comando CREATE OR REPLACE VIEW é semelhante, mas se já existir uma visão com o mesmo nome então esta é substituída. Uma visão somente pode ser substituída por um novo comando que produza um conjunto idêntico de colunas (ou seja, mesmos nomes de colunas e tipos de dado).
Se for fornecido o nome do esquema (por exemplo, CREATE VIEW meu_esquema.minha_visao ...) então a visão será criada no esquema especificado, senão será criada no esquema corrente. As visões temporárias são criadas em um esquema especial, portanto não pode ser fornecido o nome do esquema ao se criar uma visão temporária. O nome da visão deve ser distinto do nome de qualquer outra visão, tabela, seqüência ou índice no mesmo esquema.
Se for especificado a visão será criada como sendo uma visão temporária. As visões temporárias são removidas automaticamente no final da sessão corrente. As relações permanentes existentes não estarão visíveis na sessão corrente enquanto existirem visões temporárias com o mesmo nome, a não ser que sejam referenciadas por um nome qualificado pelo esquema.
Se alguma das tabelas referenciadas pela visão for temporária, a visão será criada como sendo uma visão temporária (esteja especificado TEMPORARY, ou não).
O nome (opcionalmente qualificado pelo esquema) da visão a ser criada.
Uma lista opcional de nomes a serem usados para as colunas da visão. Se não for fornecida, os nomes das colunas serão determinados a partir do comando.
Um comando SELECT ou VALUES que irá fornecer as colunas e linhas da visão.
Atualmente, as visões são somente para leitura: o sistema não permite inserção, atualização ou exclusão em uma visão. É possível obter o efeito de uma visão atualizável criando regras que reescrevem as inserções, etc. na visão como ações apropriadas em outras tabelas. Para obter informações adicionais deve ser consultado o comando CREATE RULE.
Para remover uma visão deve ser utilizado o comando DROP VIEW.
Deve ser tomado cuidado para que os nomes e os tipos das colunas da visão sejam atribuídos da maneira desejada. Por exemplo,
CREATE VIEW vista AS SELECT 'Hello World';
é ruim por dois motivos: o nome da coluna tem como padrão ?column?, e o tipo de dado da coluna tem como padrão unknown. Se for desejado um literal cadeia de caracteres no resultado da visão deve ser utilizado algo como
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
O acesso às tabelas referenciadas pela visão é determinado pelas permissões do dono da visão. Entretanto, as funções chamadas pela visão são tratadas da mesma maneira como se tivessem sido chamadas diretamente pelo comando que utiliza a visão. Portanto, o usuário da visão deve possuir permissão para chamar todas as funções utilizadas pela visão.
Visão contendo todos os filmes de comédia. Neste exemplo é criada uma visão contendo todas as colunas e todas as linhas da tabela filmes cujo tipo é comédia.
CREATE VIEW comedias AS SELECT * FROM filmes WHERE tipo = 'Comédia';
Visão contendo tabela permanente e temporária. Este exemplo mostra uma visão onde é feita a junção de uma tabela permanente com uma tabela temporária pelas suas respectivas chaves primárias. A visão criada será temporária. [7]
CREATE TABLE tbl_permanente (id_perm int PRIMARY KEY, nome_perm text); CREATE TEMPORARY TABLE tbl_temporaria (id_temp int PRIMARY KEY, nome_temp text); CREATE VIEW vis_permanente_temporaria AS SELECT id_perm, nome_perm, nome_temp FROM tbl_permanente INNER JOIN tbl_temporaria ON (id_perm = id_temp); INSERT INTO tbl_permanente VALUES (1,'nome permanente 1'); INSERT INTO tbl_permanente VALUES (2,'nome permanente 2'); INSERT INTO tbl_temporaria VALUES (1,'nome temporario 1'); INSERT INTO tbl_temporaria VALUES (2,'nome temporario 2'); \pset border 2 \pset title 'Visão juntando tabela permanente com temporária' SELECT * FROM vis_permanente_temporaria; Visão juntando tabela permanente com temporária +---------+-------------------+-------------------+ | id_perm | nome_perm | nome_temp | +---------+-------------------+-------------------+ | 1 | nome permanente 1 | nome temporario 1 | | 2 | nome permanente 2 | nome temporario 2 | +---------+-------------------+-------------------+ (2 linhas)
O padrão SQL especifica algumas funcionalidades adicionais para o comando CREATE VIEW:
CREATE VIEW nome [ ( nome_da_coluna [, ...] ) ] AS comando [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
As cláusulas opcionais para o comando SQL completo são:
Esta opção está associada às visões atualizáveis. Todos os comandos INSERT e UPDATE na visão são verificados para garantir que os dados satisfazem às condições que definem a visão (ou seja, os novos dados deverão ser visíveis através da visão). Se as condições não forem satisfeitas, a atualização será rejeitada.
Verifica a integridade nesta visão.
Verifica a integridade nesta visão e em todas as visões dependentes. É assumido CASCADED se não for especificado nem CASCADED nem LOCAL.
O comando CREATE OR REPLACE VIEW é uma extensão do PostgreSQL à linguagem. O conceito de visão temporária também é uma extensão.
[1] |
4.6.7 — Definições de visão — A visão (estritamente, a definição da visão) é uma consulta nomeada, que pode para muitas finalidades ser utilizada da mesma maneira que uma tabela base. Seu valor é o resultado da avaliação da consulta. (ISO-ANSI Working Draft) Framework (SQL/Framework), August 2003, ISO/IEC JTC 1/SC 32, 25-jul-2003, ISO/IEC 9075-1:2003 (E) (N. do T.) |
[2] |
4.14.3 — Descritores de visão — O descritor da visão descreve uma visão. Além dos componentes do descritor da tabela derivada, o descritor da visão inclui: O nome da visão; Uma indicação mostrando se a visão possui a restrição CHECK OPTION. Se possuir, se deve ser aplicada CASCADED (em cascata) ou LOCAL; A <expressão de consulta> da visão. (ISO-ANSI Working Draft) Foundation (SQL/Foundation), August 2003, ISO/IEC JTC 1/SC 32, 25-jul-2003, ISO/IEC 9075-2:2003 (E) (N. do T.) |
[3] |
Oracle — Visões — As visões são apresentações personalizadas dos dados de uma ou mais tabelas ou de outras visões. A visão também pode ser considerada uma consulta armazenada. As visões não contêm dados, em vez disso derivam seus dados das tabelas nas quais se baseiam, referidas como tabelas base das visões. Como as tabelas, as visões podem ser consultadas, atualizadas, e inserido e excluído dados das mesmas com algumas restrições. Todas as operações realizadas nas visões, na verdade, afetam as tabelas base da visão. As visões fornecem um nível adicional de segurança para a tabela por restringir o acesso a determinados conjuntos de linhas ou de colunas da tabela. Também escondem a complexidade dos dados e armazenam consultas complexas. Oracle® Database Concepts 10g Release 1 (10.1) Part Number B10743-01 (N. do T.) |
[4] |
SQL Server — A visão somente pode ser criada no banco de dados corrente. A visão pode possuir no máximo 1.024 colunas. Ao se fazer uma consulta através de uma visão, o Mecanismo de Banco de Dados realiza verificações para ter certeza que todos os objetos do banco de dados referenciados em qualquer parte do comando existem, se são válidos no contexto do comando, e se os comandos de modificação de dados não violam qualquer regra de integridade. A falha na verificação faz retornar uma mensagem de erro. A verificação bem-sucedida traduz a ação em ações sobre as tabelas subjacentes. Se a visão depender de uma tabela ou visão que foi removida, o Mecanismo de Banco de Dados produzirá uma mensagem de erro se alguém tentar utilizar a visão. Se for criada uma nova tabela ou visão para substituir a removida, e a estrutura da nova tabela não for diferente da tabela base anterior, a visão se tornará novamente utilizável. Se a estrutura da nova tabela ou visão for diferente, então a visão deverá ser removida e recriada. SQL Server 2005 Books Online — CREATE VIEW (Transact-SQL) (N. do T.) |
[5] |
DB2 — As visões são derivadas a partir de uma ou mais tabelas base, apelidos ou visões, e podem ser intercambiadas com as tabelas base ao se trazer os dados. Quando são feitas alterações nos dados mostrados pela visão, os dados são alterados na própria tabela. Pode ser criada uma visão para limitar o acesso a dados confidenciais, enquanto se concede acesso mais geral a outros dados. Ao se inserir em uma visão onde a lista de seleção da definição da visão inclui, direta ou indiretamente, o nome de uma coluna identidade da tabela base, se aplicam as mesma regras para o comando INSERT fazendo referência direta a coluna identidade da tabela base. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |
[6] |
IBM — No Centro de Controle do DB2 8.1 e nas páginas do DB2 na Internet view é traduzido como visualização. (N. do T.) |
[7] |
Exemplo escrito pelo tradutor, não fazendo parte do manual original. |