SQL em Oracle > DDL > Vistas
Vistas tl_logo2.jpg

Uma vista é uma a instrução SELECT que recebe um nome e pode ser consultada como se fosse uma tabela. Na realidade não contem dados, pois usa os da tabela que lhe dá suporte. As vistas permitem definir um nível de abstracção, um nível superior de segurança ou, de uma forma mais genérica, um ponto de vista. Uma vista pode mostrar uma parte de uma tabela, a soma de duas tabelas ou qualquer outro conjunto de dados que se consiga obter com uma instrução SELECT.

Neste módulo vamos ver os seguintes exemplos de vistas:


Com parte de uma tabela

Vamos criar uma vista (VIEW) que faz uma selecção vertical e horizontal sobre uma tabela:

create or replace view  employee_v1 as 
select
	first_name,
	last_name,
	job_id,
	salary,
	commission_pct
from
	employees
where
	department_id in (23,30);

Esta VIEW pode ser consultada com o seguinte comando:

select * from employee_v1;

Se dermos GRANT SELECT desta VIEW a outro utilizador, este só verá as linhas e colunas por ela filtradas, pelo que esta técnica é frequentemente usada para mostrar um subconjunto da tabela original.

bthome.gifTopo


Com JOIN

Vamos criar uma VIEW que faz a contagem de pessoas em cada departamento. Como queremos mostrar o nome do departamento temos que fazer um JOIN com a tabela DEPARTMENT:

create or replace view DEPT_COUNT_V1 (dept, count) as
select d.name, count(*)
from employees e
inner join department d on (d.department_id=e.department_id) 
group by d.name;

No primeiro exemplo as colunas da VIEW foram definidas com o mesmo nome das colunas da tabela original. Pelo contrário, neste exemplo o comando que cria a VIEW define o nome das colunas. Para visualizar os dados da VIEW fazemos:

select * from DEPT_COUNT_V1; 

bthome.gifTopo


Com UNION entre duas tabelas

Vamos construir uma VIEW que faz a união vertical de dois conjuntos:

create or replace view salary_month_v1 as 
select empno, 
       ename, 
       sal
from emp
union
select employee_id, 
       first_name || ' ' || last_name,
       salary
from employees;

Para visualizar os dados da VIEW:

select * from salary_month_v1 where sal >= 3000; 

Neste exemplo o query que consulta a VIEW leva uma cláusula WHERE, que funciona como um filtro adicional ao query que define a vista.

bthome.gifTopo


Ver o código da VIEW

O código de uma VIEW pode ser consultado com um query a USER_VIEWS, ALL_VIEWS ou DBA_VIEW. A primeira mostra os objectos do tipo VIEW que o próprio utilizador criou (o utilizador que tem a sessão aberta). A segunda mostra todos os objectos do tipo VIEW aos quais o utilizador actual tem acesso de leitura, onde se inclui as VIEWS que lhe pertencem e aquelas que embora pertençam a outros utilizadores, estes deram privilégios de leitura ao utilizador actual. A terceira requer um privilégio especial e mostra todas as VIEWS definidas dentro da base de dados.

select * from user_views;
select * from all_views;
select * from dba_views;    /*requer privilégios especiais*/ 

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-08-15