
O que é uma View?
No Oracle, uma View é uma tabela virtual baseada no resultado de uma consulta SQL. Ela não armazena dados por si só, mas sim uma definição de como exibir os dados que são recuperados de uma ou mais tabelas.
Vantagens de Usar Views
- Simplificação de Consultas Complexas: Views permitem que consultas complexas sejam encapsuladas em uma única “tabela” virtual, simplificando a consulta para o usuário final.
- Segurança: Views podem ser usadas para restringir o acesso a dados sensíveis, exibindo apenas as colunas e linhas necessárias para o usuário.
- Independência de Dados: Alterações na estrutura da base de dados subjacente não precisam refletir nas consultas dos usuários, desde que a View permaneça inalterada.
- Reutilização de Códigos: Consultas SQL reutilizáveis podem ser armazenadas em Views, facilitando a manutenção e a reutilização do código.
Como Criar uma View
A criação de uma View no Oracle é feita através do comando CREATE OR REPLACE VIEW
. Veja um exemplo básico:
CREATE OR REPLACE VIEW VW_FUNCIONARIOS AS SELECT f.id, f.nome, f.data_nascimento, f.email, f.codigo_cargo, c.descricao AS descricao_cargo FROM funcionarios f JOIN cargos c ON f.codigo_cargo = c.codigo;
Neste exemplo, a View vw_funcionarios
combina informações das tabelas funcionarios
e cargos
.
Observação: Utilize o alias das tabelas em consultas complexas para evitar erros de coluna ambígua.
Consultando Dados de uma View
Consultar dados de uma View é similar a consultar uma tabela normal. Veja um exemplo:
SELECT * FROM vw_funcionarios WHERE codigo_cargo = 3;
Conforme mostrado abaixo, esta consulta retorna todos os funcionários do cargo com código 3 (Gerente de Projetos).
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | DESCRICAO_CARGO | |
---|---|---|---|---|---|
6 | Fernanda Santos | 28/09/1983 | fernanda.santos@example.com | 3 | Gerente de Projetos |
7 | Lucas Oliveira | 15/07/1989 | lucas.oliveira@example.com | 3 | Gerente de Projetos |
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | Gerente de Projetos |
Atualizando Dados através de uma View
Nem todas as Views são atualizáveis. Para que uma View seja atualizável, ela deve atender a certos requisitos, como não conter funções agregadas ou subconsultas complexas. Aqui está um exemplo de uma atualização em uma View:
UPDATE vw_funcionarios SET codigo_cargo = 2 WHERE id IN (6, 7);
Após a atualização, apenas o funcionário com id 8 (Camila Pereira) permanece no cargo de Gerente de Projetos.
ID | NOME | DATA_NASCIMENTO | CODIGO_CARGO | DESCRICAO_CARGO | |
---|---|---|---|---|---|
8 | Camila Pereira | 10/04/1985 | camila.pereira@example.com | 3 | Gerente de Projetos |
Observação:
- Lembre-se de que nem todas as Views são atualizáveis. Certifique-se de que a View atende aos requisitos necessários para atualizações.
- O operador
IN
utilizado no where é útil para verificar se um valor específico está presente em uma lista de valores. No exemplo acima, estamos atualizando ocodigo_cargo
para2
apenas para os funcionários comid
6 e 7. O uso deIN
torna a query mais legível e fácil de entender, especialmente quando precisamos trabalhar com múltiplos valores.
Views com Check Option
A cláusula WITH CHECK OPTION
é uma funcionalidade importante que pode ser utilizada ao criar Views para garantir a integridade dos dados durante operações de inserção e atualização. Quando uma View é criada com WITH CHECK OPTION
, qualquer tentativa de inserir ou atualizar dados através dessa View que não satisfaça as condições definidas na consulta da View será rejeitada.
Por exemplo, considere a seguinte View que filtra funcionários ativos:
CREATE OR REPLACE VIEW VW_FUNCIONARIOS_ATIVOS AS SELECT "ID", "NOME", "DATA_NASCIMENTO", "EMAIL", "CODIGO_CARGO", "SALARIO", "DATA_ADMISSAO", "STATUS", "BONUS" FROM funcionarios WHERE status = 'Ativo' WITH CHECK OPTION;
Com a cláusula WITH CHECK OPTION
, qualquer inserção ou atualização feita através de vw_funcionarios_ativos
deve resultar em um funcionário cujo status é ‘Ativo’. Isso garante que a View sempre reflita corretamente a condição definida na sua consulta.
Views Materialized
Uma Materialized View no Oracle é uma tabela que armazena fisicamente os dados de uma consulta. Diferente das Views normais, que são apenas consultas armazenadas, as Materialized mantêm uma cópia dos dados que podem ser atualizados periodicamente.
Exemplo:
Aqui está um exemplo simples de como criar uma Materialized View:
CREATE MATERIALIZED VIEW MV_FUNCIONARIOS REFRESH FORCE ON DEMAND AS SELECT f.id, f.nome, f.data_nascimento, f.email, f.codigo_cargo, f.salario, c.descricao AS descricao_cargo FROM funcionarios f JOIN cargos c ON f.codigo_cargo = c.codigo;
Neste exemplo, a Materialized View mv_funcionarios
combina informações das tabelas funcionarios
e cargos
.
Recompilando uma View
Às vezes, é necessário recompilar uma View, especialmente após alterações nas tabelas subjacentes. Isso pode ser feito com o comando ALTER VIEW
:
ALTER VIEW vw_funcionarios COMPILE;
Excluindo uma View
Se uma View não for mais necessária, ela pode ser excluída com o comando DROP VIEW
:
DROP VIEW vw_funcionarios_ativos;
Considerações Finais
Views são uma ferramenta poderosa no Oracle para simplificar o acesso a dados, aumentar a segurança e melhorar a manutenção do código SQL. No entanto, é importante entender suas limitações e boas práticas de uso para tirar o máximo proveito dessa funcionalidade.
Se quiser saber mais, veja a documentação oficial do Oracle sobre Views para obter informações detalhadas e exemplos práticos.
Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!