zoukankan      html  css  js  c++  java
  • Oracle 11g系列:视图

      视图是数据库中特有的对象,视图用于存储查询,但不会存储数据(物化视图除外)。这是视图和数据表的重要区别。Oracle中有4种视图:关系视图、内嵌视图、对象视图和物化视图。

      1、关系视图

      1>、创建视图

    CREATE VIEW VW_EMPLOYEE
    AS
           SELECT EMP_ID,EMP_NAME FROM EMPLOYEES

      2>、查看视图定义

    SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME = 'VW_EMPLOYEE'

      3>、查看视图内容

    SELECT * FROM VW_EMPLOYEE

      4>、修改视图

    CREATE OR REPLACE VIEW VW_EMPLOYEE
    AS
           SELECT EMP_ID,EMP_NAME FROM EMPLOYEES

      5>、删除视图

    DROP VIEW VW_EMPLOYEE

      6>、编译视图

    ALTER VIEW VW_EMPLOYEE COMPILE

      2、内嵌视图

      内嵌视图也是视图,只是不会使用CREATE VIEW进行显示创建。一般情况下,被嵌套在查询语句中使用,因此称为内嵌视图。其功能类似于子查询。

    SELECT * FROM ( SELECT EMP_ID,EMP_NAME FROM EMPLOYEES ) WHERE ROWNUM <= 3

       3、对象视图

      对象视图以对象的方式进行数据存储,是对对象的查询。对象视图是基于对象类型来创建的,因此,创建对象视图之前需要先创建对象类型。

      1>、创建对象类型

    CREATE TYPE EMPLOYEE IS OBJECT
    ( 
           EMP_ID NUMBER,
           EMP_NAME VARCHAR2(20),
           SALARY NUMVER
    )

      CREATE TYPE用于创建新的类型,EMPLOYEE指定了新类型的名称,IS OBJECT表示类型为一个对象,( EMP_ID NUMBER, EMP_NAME VARCHAR2(20),SALARY NUMVER )为对象类型中各属性的具体定义。

      2>、创建对象视图

    CREATE OR REPLACE VIEW OV_EMPLOYEES
           OF EMPLOYEE
           WITH OBJECT OID(EMP_ID)
    AS
         SELECT EMPLOYEE_ID,EMPLOYEE_NAME SALARY FROM EMPLOYEES

      CREATE OR REPLACE VIEW用于创建或者替换一个视图;OV_EMPLOYEES标识了新视图的名称,OV前缀表示该视图是一个对象视图;OF EMPLOYEE表示新视图是基于对象类型EMPLOYEE;WITH OBJECT OID用于标识对象中的主键,该主键是EMP_ID属性。

      3>、查看对象视图

    DESC OV_EMPLOYEES
    SELECT VIEW_NAME,VIEW_TYPE,OID_TEXT
    FROM USER_VIEWS
    WHERE VIEW_NAME = 'OV_EMPLOYEES'

      4>、查询对象视图

    SELECT * FROM OV_EMPLOYEES

      4、物化视图

      前面三种视图:关系视图、内嵌视图和对象视图,实际都是通过定制查询并利用查询定义来获取数据。三种视图都不会直接存储数据,每次操作时,都会进行编译。物化视图存储实际数据,会占用一定的数据库空间。其更接近于临时表,但不像临时表那样在某个特定的时机会删除数据。物化视图中的数据是可重用的,经常应用于读取频繁的场合。

      物化视图对于大数据表的处理显得尤为重要。为了统计一个拥有百万级记录的数据表的总和及平均值问题,将耗费大量数据库资源和时间。可以通过物化视图进行改善,对表进行一次统计,并将统计结果存储在物化视图中,以后每次直接查询该视图即可。但是物化视图并不适合统计更新频繁的数据,因为每次的更新都连带更新物化视图,所付出的代价很大。

      1>、创建物化视图

    CREATE MATERIALIZED VIEW MV_MONTHLY_SALES
           BUILD IMMEDIATE
           REFRESH ON COMMIT
           ENABLE QUERY REWRITE
    AS
           SELECT SALE_MONTH,SUM(PRICE * QUANTITY)
           FROM SALES_ORDERS
           GROUP BY SALE_MONTH

      CREATE MATERIALIZED VIEW用于创建物化视图,物化视图没有REPLACE选项;BUILD IMMEDIATE要求Oracle立即编译视图;REFRESH ON COMMIT要求Oracle数据库一旦基础表的修改被提交,应自动更新视图,以便保持视图的数据和基础表一致;ENABLE QUERY REWRITE表示启用查询重新功能。

      2>、查询物化视图

    SELECT * FROM MV_MONTHLY_SALES

      3>、查看物化视图

    SELECT MVIEW_NAME,QUERY FROM USER_VIEWS WHERE MVIEW_NAME = 'MV_MONTHLY_SALES'

      4>、删除物化视图

    DROP MATERIALIZED VIEW MV_MONTHLY_SALES
  • 相关阅读:
    关于加密程序
    C++11的新特性lambda的小试牛刀RAII
    自动生成makefile的脚本
    关于pcre正则表达式库libpcre
    利用PHP执行SQL文件,将SQL文件导入到数据库
    Linux 系统是否适合于您?
    一个少年电脑病毒作者的独白
    PHP编程效率的20个要点
    JVM源码分析之javaagent原理完全解读
    如何更好的利用Node.js的性能极限
  • 原文地址:https://www.cnblogs.com/libingql/p/3599325.html
Copyright © 2011-2022 走看看