• 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
  • 相关阅读:
    Spring Cloud Config 配置高可用集群
    Spring Cloud Config 自动刷新所有节点 架构改造
    Spring Cloud Config 自动刷新所有节点
    Spring Boot war包&jar包对比
    Spring Cloud Config 服务端与 客户端之间的关系
    Spring Cloud Config 配置刷新
    Spring Cloud Config 配置中心 自动加解密功能 JCE方式
    SpringCloud 详解配置刷新的原理 使用jasypt自动加解密后 无法使用 springcloud 中的自动刷新/refresh功能
    IDEA Rest Client使用
    Spring Cloud Config 配置中心 自动加解密功能 jasypt方式
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2743810.html
Copyright © 2020-2023  润新知