设为首页 收藏本站
查看: 807|回复: 0

[经验分享] Oracle中视图的创建和处理方法

[复制链接]

尚未签到

发表于 2018-9-13 13:33:42 | 显示全部楼层 |阅读模式
  本文将介绍Oracle中视图的创建和处理方法,视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,它是Oracle中的一个重要概念。
  视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。
  视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。
  一、视图的优点:
  1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
  2.用户通过简单的查询可以从复杂查询中得到结果。
  3.维护数据的独立性,试图可从多个表检索数据。
  4.对于相同的数据可产生不同的视图。
  二、视图分为简单视图和复杂视图:
  1、简单视图只从单表里获取数据,复杂视图从多表;
  2、简单视图不包含函数和数据组,复杂视图包含;
  3、简单视图可以实现DML操作,复杂视图不可以。
  三、视图的创建:
  CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
  [(alias[, alias]…)]
  AS subquery
  [WITH CHECK OPTION [CONSTRAINT constraint]]
  [WITH READ ONLY]
  其中:OR REPLACE  :若所创建的试图已经存在,ORACLE自动重建该视图;
  FORCE:不管基表是否存在ORACLE都会自动创建该视图;
  NOFORCE    :只有基表都存在ORACLE才会创建该视图:
  alias:为视图产生的列定义的别名;
  subquery :一条完整的SELECT语句,可以在该语句中定义别名;
  WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
  WITH READ ONLY    :该视图上不能进行任何DML操作。
  例如:
  CREATE OR REPLACE VIEW dept_sum_vw(name,minsal,maxsal,avgsal)
  AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
  FROM  emp e,dept d
  WHERE e.deptno=d.deptno
  GROUP BY d.dname;
  四、视图的定义原则:
  1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
  2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用ORDER BY 子句;
  3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
  4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象权限。
  五、视图的查询:
  视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。
  还可以查询视图的全部信息和指定的数据行和列。 如:检索数据:
  SQL>SELECT * FROM dept_sum_vw;
  查询视图定义:
  SELECT view_name,text from user_views;
  其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS 得到相关信息。
  六、修改视图:
  通过OR REPLACE 重新创建同名视图即可。
  七、视图上的DML 操作:
  DML操作应遵循的原则:
  1.简单视图可以执行DML操作;
  2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能
  删除数据行;
  3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
  a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
  b.使用表达式定义的列;
  c.ROWNUM伪列。
  d.基表中未在视图中选择的其他列定义为非空且无默认值。
  视图可用于保持数据库的完整性,但作用有限。
  通过视图执行引用完整性约束可在数据库级执行约束。
  WITH CHECK OPTION 子句限定:
  通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
  例如:
  CREATE OR REPLACE VIEW vw_emp20
  AS SELECT * FROM emp
  WHERE deptno=20
  WITH CHECK OPTION constraint vw_emp20_ck;
  视图 已建立。
  查询结果:
  SELECT empno,ename,job FROM vw_emp20;
  EMPNO  ENAME  JOB
  --------------------- -------------- -------------
  7369   SMITH  CLERK
  7566   JONES  MANAGER
  7902   FORD  ANALYST
  修改:
  UPDATE vw_emp20
  SET    deptno=20
  WHERE  empno=7902;
  将产生错误:
  UPDATE vw_emp20
  *
  ERROR 位于第一行:
  ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
  八、视图的删除
  DROP VIEW VIEW_NAME语句删除视图。删除视图的定义不影响基表中的数据。只有视图所有者和具备DROP VIEW权限的用户可以删除视图。视图被删除后,基于被删除视图的其他视图或应用将无效。
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-578182-1-1.html 上篇帖子: Oracle性能调整的要点之SGA-Oracle之路 下篇帖子: 在Oracle的连接视图上进行数据更新操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表