Oracle对象之视图

视图
     视图可以认为是为了方便查询所形成的表
     视图并没有存储实际的数据
视图是表中数据的逻辑表示。视图本身并不存储任何数据(这就是视图和表最直接的差别),而真正的数据是存在于基表中的。视图也和表一样,也带有名称的列和行。简单的说,视图就是一个展示的窗口,它可以从这个表拿点数据,从另一个表拿点数据,进行展示。这样一来,就不用建立一个新的表,就节省了空间。
 
对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。
但是我们一般不建议通过修改视图来修改数据。
 
 
 
如果不能创建可能是因为权限问题
更换用户或者授权即可。
 

视图的基本语法:

CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name

[(column_name)[,….n]]

AS

Select_statement

[WITH CHECK OPTION[CONSTRAINT constraint_name]]

[WITH READ ONLY]

说明:

view_name :  视图的名字

column_name: 视图中的列名

在下列情况下 , 必须指定视图列的名称

* 由算术表达式 , 系统内置函数或者常量得到的列

* 共享同一个表名连接得到的列

* 希望视图中的列名与表中的列名不同的时候

 

REPLACE:  如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

FORCE:  强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

NOFORCE:  只有基表存在且具有创建视图权限时, 才可以创建视图

WITH CHECK OPTION  指出在视图上所进行的修改都要符合select_statement 所指定的限制条件

WITH READ ONLY  只允许查看视图

 

视图的定义原则: 
       1. 视图的查询可以使用复杂的 SELECT 语法,包括连接 / 分组查询和子查询; 
       2. 在没有 WITH CHECK OPTION 和 READ ONLY的情况下,查询中不能使用 
          ORDER BY子句; 
       3. 如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;
       4. OR REPLACE 选项可以不删除原视图便可更改其定义并重建,或重新授予对象 
         权限。

1. 查询视图: 可依赖于多个基表.

SELECT  * FROM view_name; /* 类似于查询表数据*/

 

2. 更新视图的前提:

没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.

 

3. 插入数据

INSERT  INTO  view_name VALUES();

 

4. 修改数据:

UPDATE  view_name SET …

若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.

 

5. 删除数据:

Delete from view_name where …

同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.

 

6. 修改视图定义:

修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.

 

7. 删除视图:

DROP VIEW view_name;

  只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。删除视图的定义不影响基表中的数据。视图被删除后,基于被删除视图的其他视图或应用将无效。

 

创建视图
SQL> create view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno;
 
创建视图为只读,加上with read only
SQL> create view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno;
     WITH READ ONLY;
 
创建或者替代原有视图
SQL> create or replace view empinfoview
  2  as
  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  4  from emp e, dept d
  5  where e.deptno=d.deptno
  6  with read only;
 
显示视图结构   
SQL> desc empinfoview 
 
查看视图
SQL> select * from empinfoview;
 
     EMPNO ENAME             SAL     ANNSAL DNAME                                                                                                                                                       
---------- ---------- ---------- ---------- --------------                                                                                                                                             
      7369 SMITH             800       9600 RESEARCH                                                                                                                                                   
      7499 ALLEN            1600      19200 SALES                                                                                                                                                       
      7521 WARD             1250      15000 SALES                                                                                                                                                       
      7566 JONES            2975      35700 RESEARCH                                                                                                                                                   
      7654 MARTIN           1250      15000 SALES                                                                                                                                                       
      7698 BLAKE            2850      34200 SALES                                                                                                                                                       
      7782 CLARK            2450      29400 ACCOUNTING                                                                                                                                                 
      7788 SCOTT            3000      36000 RESEARCH                                                                                                                                                   
      7839 KING             5000      60000 ACCOUNTING                                                                                                                                                 
      7844 TURNER           1500      18000 SALES                                                                                                                                                       
      7876 ADAMS            1100      13200 RESEARCH

 

 
posted @ 2017-09-13 16:49  赵安之  阅读(356)  评论(0编辑  收藏  举报