zoukankan      html  css  js  c++  java
  • Oracle视图

    视图

    概念:视图就是提供一个查询的窗口,所有数据来自于原表

    视图就是封装了一条复杂查询的语句。

    视图的作用

    1、视图可以屏蔽掉一些敏感字段。比如emp表中有一个敏感字段sal,即薪水,所以在视图中不显示这一列即可。对基表中的其它列起到安全和保密的作用,可以限制数据访问。

    2、保证总部和分部数据及时统一。比如总公司有雨伞10万把,分公司卖雨伞,由于分公司要卖的雨伞的数量不能超过总公司雨伞的数量,所以分公司必须知道总部有多少雨伞。如果总部和分部都执行了查询语句,当总部突然之间卖出了10万把雨伞,此时总部已经没货了,如果分部没有及时去查询,就会出问题。为了避免这种情况,我们让总部从表中查,分部去看视图。因为视图中根本就没数据,那么只要总部的数据改变了,分部立马就能看到最新的数据。

    3、如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询;

    要想创建视图,必须有DBA权限。

    查看哪些用户被授予了DBA权限

    select * from dba_role_privs where granted_role='DBA';

     即itcast用户(密码为itcast)有DBA权限。scott用户没有权限,在Scott用户下会报错如下:

    要想创建关于emp表的视图,由于当前用户下没有emp表,我们可以通过跨用户查询语句来创建表,

    -- 跨用户查询
    select * from scott.emp;

    通过跨用户查询来创建emp表

    -- 通过跨用户查询来创建emp表
    create table emp as select * from scott.emp;

    创建视图

    语法 1.:CREATE VIEW 视图名称 AS 子查询

    范例:建立一个视图,此视图包括了 20 部门的全部员工信息

    create view empvd20 as select * from emp t where t.deptno = 20

    此时,views目录下会多一个视图

    查询视图

    与查询表的语法一模一样。视图创建完毕就可以使用视图来查询,查询出来的都是 20 部门的员工
    -- 查询刚创建完的视图
    select * from empvd20;

    结果如下:

    修改视图

    语法和修改表的语法一样。凡是做增删改,一定要记得加上提交事务。

    -- 修改视图
    update empvd20 t set t.ename = 'smithOne' where t.empno=7369;
    commit;

    查看视图

    select * from empvd20;

    结果:

     查看emp表

    select * from emp;

    结果:

     我们尝试着修改视图但是发现是视图所查询的表的字段值被修改了,即修改视图也就是修改了表,视图数据的改变,其实还是改的原表的数据。所以我们一般不会去修改视图。 

    我们可以设置视图为只读。

    语法 2:CREATE OR REPLACE VIEW 视图名称 AS 子查询 

    如果视图已经存在我们可以使用语法 2 来创建视图,这样已有的视图会被覆盖。 
    -- 对已经存在的视图进行覆盖
    create or replace view empvd20 as select * from emp t where t.deptno=10

    结果如下:

    创建只读视图

    语法 3:CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY

    加上with read only即可,这样就无法修改视图了。

    -- 创建只读视图
    create or replace view v_emp as select * from emp t where t.deptno=20 with read only;

  • 相关阅读:
    C++ 单例模式
    单链表快速排序
    美团后台面经
    排序算法及其优化总结
    (转)再谈互斥量与环境变量
    互斥锁和自旋锁
    算法题总结----数组(二分查找)
    Linux里的2>&1的理解
    Ubuntu下开启mysql远程访问
    说说eclipse调优,缩短启动时间
  • 原文地址:https://www.cnblogs.com/zwh0910/p/14827151.html
Copyright © 2011-2022 走看看