Você está na página 1de 28

12

Criando Views

Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Objetivos
Depois de completar esta lição, você poderá
fazer o seguinte:
• Descrever uma view
• Criar uma view
• Recuperar dados através de uma view
• Alterar a definição de uma view
• Inserir, atualizar e deletar dados através de
uma view
• Eliminar uma view

12-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Objetivos
Depois de completar esta lição, você poderá
fazer o seguinte:
• Descrever uma view em linha
• Executar a Análise "Top-N"

12-3 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Objetos de Banco de Dados

Objeto Descrição

Tabela Unidade básica de armazenamento; composto de


linhas e colunas

View Representa logicamente subconjuntos de dados de


uma ou mais tabelas

Seqüência Gera valores de chave primária

Índice Melhora o desempenho de algumas consultas

Sinônimo Nome alternativo para um objeto

12-4 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


O Que É uma View?
Tabela EMP
EMPNO ENAME JOB
JOB MGR HIREDATE SAL
SAL COMM
COMM DEPTNO
DEPTNO
----- --------
------- ---------
--------------
---- --------- ------
----- -----
------------
-------
7839
7839 KING PRESIDENT
PRESIDENT 17-NOV-81 5000
5000 10
10
7782
7698 CLARK
BLAKE MANAGER
MANAGER 7839 09-JUN-81
01-MAY-81 2850
1500 300 30
10
7934
7782 MILLER
CLARK MANAGER
CLERK 7839 23-JAN-82
7782 09-JUN-81 2450
1300 10
10
7566
7566 JONES MANAGER
MANAGER 7839 02-APR-81 2975
2975 20
20
View EMPVU10
7788
7654 SCOTT
MARTIN SALESMAN
ANALYST 7698 09-DEC-82
7566 28-SEP-81 1250
3000 1400 30
20

EMPNO 7876
7499 ADAMS
ENAMEALLEN SALESMAN
CLERK
JOB 7698 12-JAN-83
7788 20-FEB-81 1600
1100 300 30
20
------ 7369
--------
7844 -----------
TURNER SALESMAN
SMITH CLERK 7698 17-DEC-80
7902 08-SEP-81 1500
800 0 30
20
7902
7900 FORD
JAMES CLERK
ANALYST 7698 03-DEC-81
7566 950
3000 30
20
7839 7698
KING
7521 BLAKE
WARD
PRESIDENT
SALESMAN
MANAGER 7698 01-MAY-81
7839 22-FEB-81 1250
2850 500 30
30
7782 7654
CLARK
7902 FORD
MARTIN MANAGER
ANALYST
SALESMAN 7566 28-SEP-81
7698 03-DEC-81 3000
1250 1400 20
30

7934 7499
MILLER
7369 ALLEN
SMITH
CLERK
CLERK
SALESMAN 7698
7902 20-FEB-81
17-DEC-80 800
1600 300 20
30
7844
7788 TURNER
SCOTT ANALYST
SALESMAN 7566 08-SEP-81
7698 09-DEC-82 3000
1500 0 20
30
7900
7876 JAMES
ADAMS CLERK
CLERK 7788 03-DEC-81
7698 12-JAN-83 1100
950 20
30
7521
7934 WARD
MILLER CLERK
SALESMAN 7782 22-FEB-81
7698 23-JAN-82 1300
1250 500 10
30

12-5 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Por Que Usar Views?

• Para restringir o acesso a dados


• Para facilitar as consultas complexas
• Para permitir a independência dos dados
• Para apresentar diferentes views dos
mesmos dados

12-6 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Views Simples e
Views Complexas

Recurso Views Simples Views Complexas

Número de tabelas Uma Uma ou mais

Contém funções Não Sim

Contém grupos de dados Não Sim

DML através da view Sim Nem sempre

12-7 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Criando uma View
Embuta uma subconsulta na instrução CREATE VIEW.

A subconsulta pode conter uma sintaxe SELECT complexa.


• A subconsulta não pode conter uma cláusula ORDER BY.

View CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW
[(apelido[, apelido]...)]
AS subconsulta
[WITH CHECK OPTION [CONSTRAINT restrição]]
[WITH READ ONLY];

12-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Criando uma View
• Crie uma view, EMPVU10, que contenha detalhes sobre os
funcionários no departamento 10.

SQL> CREATE VIEW empvu10


2 AS SELECT empno, ename, job
3 FROM emp
4 WHERE deptno = 10;
View created.

• Descreva a estrutura da view usando o


comando DESCRIBE do SQL*Plus.
SQL> DESCRIBE empvu10

12-9 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Criando uma View
• Crie uma view usando apelidos de coluna
na subconsulta.
SQL> CREATE VIEW salvu30
2 AS SELECT empno EMPLOYEE_NUMBER, ename NAME,
3 sal SALARY
4 FROM emp
5 WHERE deptno = 30;
View created.

• Selecione as colunas a partir desta view


pelos nomes de apelidos dados.

12-10 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Recuperando Dados de uma View

SQL> SELECT *
2 FROM salvu30;

EMPLOYEE_NUMBER NAME SALARY


--------------- ---------- ---------
7698 BLAKE 2850
7654 MARTIN 1250
7499 ALLEN 1600
7844 TURNER 1500
7900 JAMES 950
7521 WARD 1250

6 rows selected.

12-11 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Consultando uma View

SQL*Plus
USER_VIEWS
SELECT *
EMPVU10
FROM empvu10; SELECT empno, ename, job
FROM emp
WHERE deptno = 10;
7839 KING PRESIDENT
7782 CLARK MANAGER EMP
7934 MILLER CLERK

12-12 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Modificando uma View
• Modificar a view EMPVU10 usando a cláusula
CREATE OR REPLACE VIEW. Adicionar um
apelido para cada nome de coluna.
SQL> CREATE OR REPLACE VIEW empvu10
2 (employee_number, employee_name, job_title)
3 AS SELECT empno, ename, job
4 FROM emp
5 WHERE deptno = 10;
View created.

• Os apelidos de coluna na cláusula CREATE


VIEW estão listados na mesma ordem que as
colunas na subconsulta.

12-13 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Criando uma View Complexa
Criar uma view complexa que contenha
funções de grupo para exibir os valores a
partir de duas tabelas.
SQL> CREATE VIEW dept_sum_vu
2 (name, minsal, maxsal, avgsal)
3 AS SELECT d.dname, MIN(e.sal), MAX(e.sal),
4 AVG(e.sal)
5 FROM emp e, dept d
6 WHERE e.deptno = d.deptno
7 GROUP BY d.dname;
View created.

12-14 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Regras para Executar Operações
DML em uma View
• Você poderá executar as operações DML em
views simples.
• Você não poderá remover uma linha se a view
contiver:
– Funções de grupo
– Uma cláusula GROUP BY
– A palavra-chave DISTINCT
– A palavra-chave da pseudocoluna ROWNUM

12-15 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Regras para Executar Operações
DML em uma View
• Você não poderá modificar dados em uma view
se eles contiverem:
– Uma das condições mencionadas no slide
anterior
– Colunas definidas por expressões
– A pseudocoluna ROWNUM
• Você não poderá adicionar dados se:
– A view contiver uma das condições
mencionadas acima ou no slide anterior
– Houver colunas NOT NULL nas tabelas-base
que não forem selecionadas pela view
12-16 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Usando a Cláusula
WITH CHECK OPTION
• Você poderá garantir que a DML na view
continue no domínio da view usando a
cláusula WITH CHECK OPTION.
SQL> CREATE OR REPLACE VIEW empvu20
2 AS SELECT *
3 FROM emp
4 WHERE deptno = 20
5 WITH CHECK OPTION CONSTRAINT empvu20_ck;
View created.

• Qualquer tentativa de alteração do número


do departamento para qualquer linha na view
falhará porque ela violará a restrição WITH
CHECK OPTION.
12-17 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Negando Operações DML
• Você poderá assegurar que nenhuma operação
DML ocorra através da adição da opção WITH
READ ONLY à definição da sua view.
SQL> CREATE OR REPLACE VIEW empvu10
2 (employee_number, employee_name, job_title)
3 AS SELECT empno, ename, job
4 FROM emp
5 WHERE deptno = 10
6 WITH READ ONLY;
View created.

• Qualquer tentativa de executar uma DML


em uma linha na view resultará em erro no
Oracle Server.
12-18 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Removendo uma View

Remover uma view sem perder dados porque


uma view está baseada em tabelas
subjacentes no banco de dados.

DROP VIEW view;

SQL> DROP VIEW empvu10;


View dropped.

12-19 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Views Em Linha

• Uma view em linha é uma subconsulta


subjacente com um apelido (nome de
correlação) que pode ser usado em uma
instrução SQL.
• Uma view em linha é similar ao uso de uma
subconsulta nomeada na cláusula FROM
da consulta principal.
• Uma view em linha não é um objeto de
esquema.

12-20 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Análise "Top-N"

• As consultas Top-N pedem os maiores ou


menores valores n de uma coluna.
– Quais são os dez produtos mais
vendidos?
– Quais são os dez produtos menos
vendidos?
• Tanto o conjunto dos maiores quanto dos
menores valores são considerados
consultas Top-N.

12-21 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Executando a Análise "Top-N"

A estrutura de nível mais elevado de uma


consulta de análise Top-N é:

SQL> SELECT [column_list], ROWNUM


2 FROM (SELECT [column_list] FROM table
3 ORDER BY Top-N_column)
4 WHERE ROWNUM <= N

12-22 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Exemplo de Análise "Top-N"
Para exibir os nomes dos funcionários que
recebem os três maiores salários e seus
nomes na tabela EMP.
SQL> SELECT ROWNUM as RANK, ename, sa
2 FROM (SELECT ename,sal FROM empl
3 ORDER BY sal DESC)
4 WHERE ROWNUM <= 3;

RANK ENAME SAL


--------- ---------
1 ---------- 5000
2 KING 3000
3 SCOTT 3000
FORD

12-23 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Sumário
• Uma view é criada a partir de dados em
outras tabelas ou views.
• Uma view fornece todas as vantagens a
seguir:
– Restringe o acesso a bancos de dados
– Simplifica as consultas
– Permite a independência de dados
– Exibe várias views dos mesmos dados
– Pode ser eliminada sem remover os dados
subjacentes

12-24 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Sumário
• Uma view em linha é uma subconsulta com
um nome apelido.
• As análises "Top-N" podem ser executadas
usando-se:
– Subconsulta
– Consulta externa

12-25 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


Visão Geral do Exercício
Criando uma view simples
Criando uma view complexa
Criando uma view com restrição de verificação

Tentando modificar dados na view

Exibindo definições de view

Removendo views


12-26 Copyright Oracle Corporation, 1999. Todos os direitos reservados.


12-27 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
12-28 Copyright Oracle Corporation, 1999. Todos os direitos reservados.