Vistas |
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.
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; |
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.
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*/ |
Realizado por Turtle Learning ®. Última alteração em 2011-08-15