博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【oracle】视图

Posted on 2017-09-21 20:58  那家店  阅读(127)  评论(0)    收藏  举报

视图:

视图就是一个在数据字典中定义的select语句,它不存储数据,在一定条件下可以使用dml操纵视图,但对视图的操作实际是对基表的操作。当使用视图时会重新执行创建视图的SQL语句。

视图的作用:

  • 简化查询语句:将复杂的多表连接语句定义为视图,通过查询视图达到简化查询语句的作用 。
  • 屏蔽数据(定制数据):通过视图只能查看到视图定义的列。

 

创建视图:

create [or replace] [force|noforce] view view_name
[column1 [,column2] [,...] ]
as
select_statements
[with check option [constraint constraint_name] ]
[with read only]


create or replace :创建视图,如果视图名字已存在,覆盖原视图。
force|noforce     :force 创建视图是基表可以不存在,noforce 基表必须存在(默认)。
select_statements :任意正确的完整的查询语句。
with check option :更改数据时,必须满足where子句的条件。
with read only    :设置为只读状态

 

 

创建视图需要create view权限。

--将create view权限授予scott用户:
SYS>grant create view to scott;

 

 创建属于SALES部门的员工信息的视图:

SCOTT>create view sales_employees_view as
  2  select e.empno, e.ename, e.job, e.sal, d.loc
  3  from dept d, emp e
  4  where d.deptno = e.deptno
  5  and d.dname = 'SALES';

 

使用视图:

SCOTT>select * from SALES_EMPLOYEES_VIEW;

     EMPNO ENAME      JOB              SAL LOC
---------- ---------- --------- ---------- -------------
      7521 WARD       SALESMAN        1250 CHICAGO
      7844 TURNER     SALESMAN        1500 CHICAGO
      7499 ALLEN      SALESMAN        1600 CHICAGO
      7900 JAMES      CLERK            950 CHICAGO
      7698 BLAKE      MANAGER         2850 CHICAGO
      7654 MARTIN     SALESMAN        1250 CHICAGO

6 rows selected.

 

 

 查询视图sales_employees_view的定义:

--使用dbms_metadata.get_ddl()
SCOTT>set long 10000
SCOTT>select dbms_metadata.get_ddl('VIEW','SALES_EMPLOYEES_VIEW') from dual; 

DBMS_METADATA.GET_DDL('VIEW','SALES_EMPLOYEES_VIEW')
--------------------------------------------------------------------------------

  CREATE OR REPLACE FORCE VIEW "SCOTT"."SALES_EMPLOYEES_VIEW" ("EMPNO", "ENAME",
 "JOB", "SAL", "LOC") AS
  select e.empno, e.ename, e.job, e.sal, d.loc
from dept d, emp e
where d.deptno=e.deptno
and d.dname='SALES'


--查user_views
SCOTT>set long 10000
SCOTT>select text from user_views where view_name = 'SALES_EMPLOYEES_VIEW';

TEXT
--------------------------------------------------------------------------------
select e.empno, e.ename, e.job, e.sal, d.loc
from dept d, emp e
where d.deptno=e.deptno
and d.dname='SALES'

 

 

删除视图:

SCOTT>drop view sales_employees_view;