码迷,mamicode.com
首页 > 数据库 > 详细

oracle视图

时间:2015-09-13 21:36:53      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

视图和同义词

一.视图:

1.首先我们说说视图的作用:

  • 视图跟查询select的作用差不多,只不过视图具有封装的作用,跟java中的类的概念有相似之处。通过创建一个视图,你可以把一些简单的,复杂的查询的sql语句存贮于它里面,所以,视图是基于一张表或多张表的。
  • 视图实际并不存贮数据,创建视图后,每次通过视图查询,程序就会在后台自己执行视图中的select语句。数据是存贮在基表中的。(基表就是创建视图时用到的表)。user_table,user_sequences,user_indexes

   都是视图。

  • 好处:将复杂的查询用视图来实现,隐藏复杂的业务逻辑(很像java类中的函数)。

      可以隐藏表中的某些行,大公司用于隐藏一些关键信息很重要。

      可以禁止用户访问基表,只能通过视图来访问。

2.创建视图前所需要的条件。

  • 学习几天数据库之后,你就会知道,不管对数据做什么操作,首先这个用户必须要有操作的权限。所以,创建视图需要视图的权限。

  查询用户的权限:

select * from user_role_privs;

  看看它有没有创建视图的权限。

  • 授予用户创建视图的权限。
grant create view to scott;

  给scott用户分配创建视图的权限。

3.准备工作做好之后就可以创建视图了。

  • 创建视图的语法。  

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

  [ALIAS_NAME,....(表达式)] AS SUBQUERY

  [WITH CHECK OPTION | READ ONLY]

  CONSTRAINT constraint_name; 

  OR REPLACE:如果你已经创建了一个同名的视图,那么加上or replace的话,就会覆盖前面的视图,否则的话就出出错。

  FORCE:强制创建视图,即使基表不存在也创建。

  NOFORCE:如果基表不存在,则不创建视图。默认值。

  view_name:视图名称。

  ALIAS_NAME:子查询表达式的别名。  

  WITH CHECK OPTION:表示只有被查询搜索到的数据行才可以进行插入,更新,删除操作。默认是不使用该项。

  constraint_name:是前面约束的名称。

  WITH READ ONLY:只能读取数据,不能增删改。

  • 简单视图示例:
create view emp_view AS
select * from dept
where deptno<20;
  • 复杂视图示例:
create or replace view emp_dept_salgrade AS
select empno,ename,sal,dname,grade from emp e 
inner join dept d using(deptno)
inner join salgrade s on e.sal between s.losal and s.hisal
with check option
constraint cname;

  创建了一个以三张表为基表的多表关联视图,视图里面可以查询到的内容有emp表的empno,ename,sal和dept表的dname和salgrade表的grade(工资等级),并且是一个增删改的表。

  • 简单视图和复杂视图的区别。(简单和复杂之分是我自己的总结,不官方,理解就好。)

  1.简单视图是以一张表为基表存贮sql语句的视图,而复杂视图是以多张表为基表。

  2.简单视图可以通过视图来对表的数据增删改,而基于多表的复杂视图不可以。

4.利用视图。

  注意:复杂视图只能查询(一般创建视图就是为了封装复杂sql查询语句,所以查询用的多,大多都是复杂视图。)简单视图可以增删改查。

  • 查询:跟通过表查询差不多。
select * from emp_dept_salgrade;

  注意:如果create视图时用了check option语句,那么增删改的时候将受到select语句where的限制。例如,查询的是where 工资>3000职工的信息,那么在增删改的时候的数据的工资如果不大于3000的话,就会报错。

     如果create视图时用了read only语句,那么不论是复杂视图还是简单视图的话,都不可以增删改。

  • 增加:

  注意:如果通过视图往表里面增加数据时,必须符合表的约束。比如:

      create or replace view e AS
      select ename from emp
      with check option constraint nnn;

      insert into e(ename)
      values(‘5654‘,‘XU‘);

     这个视图里面只有一个ename列,且不是主键,那么你就不能增加数据了,因为基表里面的主键是非空的,通过视图增加数据也必须符合表的结构,所以不能通过这个视图增加。故在创建视图时,尽量把一些具有非空约束的列也放在select语句中,减少增加数据时的困难度。

  • 修改:

    update e set ename=‘xuwenshuai‘ where ename=‘KING‘;修改表中和视图中ename为KING->xuwenshuai

  • 删除:

    delete from e where ename=‘xuwenshaui‘;通过视图删除了ename=‘xuwenshuai’的一行数据。

 5.查看视图结构。(视图包含的数据种类和数据类型和一些约束。)
  DESCRIBE view_name;
  示例:describe emp_dept_salgrade;
  查询出来的结果如下:

    名称 空值 类型
    ----- -------- ------------
    EMPNO NOT NULL NUMBER(4)
    ENAME VARCHAR2(10)
    SAL NUMBER(7,2)
    DNAME VARCHAR2(14)
    GRADE NUMBER

 

 6.查询视图定义的信息(视图的名称,视图的字符长度,文本代码,约束)

select  view_name ,text_length,text
from user_views;

 查询结果如下:

 技术分享

 二.同义词:

1.认识同义词:同义词就是给那么比较长的对象的名称创建一个别名,比如视图的名称,我有时也会写的很长,而同义词的作用就是:1:缩短对象名字的长度;2名字缩短之后,访问的时候也比较方便。

2.准备工作:给用户分配创建视图的权限。

  grant create synonym to scott;

3.创建同义词

  CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;

  示例:为上面的复杂视图创建一个同义词。

  create synonym eds  for emp_dept_salgrade;

  注意:如果在创建同义词的时候加上了public字样的话,那么在删除的时候也要为它分配删除的权限,因为加上public的话这个同义词就是公共的。不加的话分配创建权限时会自动分配删除的权限。

4.删除同义词

  DROP SYNONYM synonmy_name;

oracle视图

标签:

原文地址:http://www.cnblogs.com/bzx888/p/4805505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!