zoukankan      html  css  js  c++  java
  • oracle 视图的编译

    视图依赖于基础表的存在而存在,当基础表进行了结构上的修改后,有可能会对视图产生印象,如果要再次使用此试图,需要进行编译。

    基础表如下:

    基础表
    1 create table employee
    2 (
    3 employ_id number primary key,
    4 first_name nvarchar2(10),
    5 last_name nvarchar2(10),
    6 province varchar2(10),
    7 city varchar2(10),
    8 salary number
    9 )

    视图

    销售人员的月薪
    1 create or replace view v$employee$sales
    2 as
    3 select employ_id,family_name||first_name as employeename,salary+total_price*0.1 as salary
    4 from employee e join employee_sales  es on e.employ_id=es.sale_by

    先查看视图的状态、可用性

    SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE=UPPER('VIEW') AND OBJECT_NAME =UPPER('v$employee$sales')

    结果如下

    可以看到状态为 VALID(可用的)

    此时向表employee中添加一列Age

    添加一列
    1 alter table employee
    2 add age number

    再次运行 SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE=UPPER('VIEW') AND OBJECT_NAME=UPPER('v$employee$sales')

    结果如下

    因为基础表的结构发生了变化,所以此时的Status状态变为INVALID(无效的)

    在重新编译之前,不能使用此视图

    编译视图

    alter view v$employee$sales compile

    再次查询其状态

    再次编译后,视图状态为可用。

    其实只要对视图执行一次查询,就可以将试图的状态置位可用(oracle在执行真正的查询前,会自动编译视图)

    实际上,只有修改表的结构后才会影响视图的有效性,而修改表的数据不会影响视图的有效性。

    但是,并非针对所有基础表的修改后,通过编译视图都可以通过。比如修改基础表的列名

    alter table employee rename column first_name to firstname

    查询视图状态

    SELECT OBJECT_NAME,STATUS FROM USER_OBJECTS WHERE OBJECT_TYPE=UPPER('VIEW') AND OBJECT_NAME =UPPER('v$employee$sales')

    编译视图 v$employee$sales

    因为我们已经把first_name 修改为firstname

    只有我们针对视图进行修改,才能顺利通过

    View Code
    1 create or replace view v$employee$sales
    2 as
    3 select employ_id,family_name||firstname as employeename,salary+total_price*0.1 as salary
    4 from employee e join employee_sales  es on e.employ_id=es.sale_by
  • 相关阅读:
    转】用Maven构建Mahout项目
    转】Mahout学习路线图
    转】Spark DataFrames入门指南:创建和操作DataFrame
    转】Spark DataFrame小试牛刀
    转】用Maven构建Hadoop项目
    【转】Hive导入10G数据的测试
    软考概述
    vi 按了ctrl+s之后
    VC6.0入门使用
    后台使用oracle前台使用easyui分页机制
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2743810.html
Copyright © 2011-2022 走看看