视图:
视图就是一个在数据字典中定义的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;