zoukankan      html  css  js  c++  java
  • ORACLE 视图的 with check option

    ORACLE 视图的 with check option

    我们来看下面的例子:
    create or replace view testview
    as
    select empno,ename from emp where ename like ‘M%’
    with check option;

    这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果:
    select * from testview得到:
    EMPNO ENAME
    ———- ———–
    7654 MARTIN
    7934 MILLER
    这两条记录

    然后我们在试图将其中一条更新:
    update testview
    set ename = ‘Mike’
    where empno = 7654;
    OK,这条更新语句可以执行,并没有什么问题,但是当我们执行另一条更新时:
    update testview
    set ename = ‘Robin’
    where empno = ‘7654′;
    就会出现ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句的错误,这是因为什么呢?

    这是因为前面我们在创建视图时指定了witch check option关键字,这也就是说,更新后的每一条数据仍然要满足创建视图时指定的where条件,所以我们这里发生了错误ORA-01402。

    但是需要说明的时 ,虽然指定了with check option,我们还是可以删除视图中的数据。例如上例中,我们可以使用
    delete from test where where empno =   7654


    我创建一个视图:   
      create   view   IS_student   
      as   
      select   sno,sname,sage   
      from   student   
      where   sdept='IS'   
      with   check   option;   
      加上了with   check   option;后,不能执行插入操作:   
        
      insert   into   is_student   
      values('95100','李娜',12)   
        
      什么原因?不加上with   check   option则可以!  

     

    with   check   option可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。   
        
      --->而你只是查询出sdept='is'的纪录,你插入的根本不符合sdept='is'呀,所以就不行

     

    默认情况下,由于行通过视图进行添加或更新,当其不再符合定义视图的查询的条件时,它们即从视图范围中消失。例如,可创建一个查询,从而定义一个视图以在表中检索所有员工薪水低于   $30,000   的行。如果该员工的薪水涨到了   $32,000,则查询视图时该特定员工将不再出现,因其薪水不符合视图所设的标准。但是,WITH   CHECK   OPTION   子句强制所有数据修改语句均根据视图执行,以符合定义视图的   SELECT   语句中所设的条件。如果使用该子句,修改行时需考虑到不让它在修改完后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。   

     《转自网络》

  • 相关阅读:
    Nginx-->基础-->理论-->001:Nginx基本介绍
    Nginx-->基础-->理论-->nginx进程模型
    Nginx-->基础-->排错-->nginx错误总结
    Nginx-->基础-->安装-->001:安装总结
    网络-->监控-->单位换算
    网络-->监控-->OID-->BGP
    在腾讯云centOs系统上安装nginx
    react-native入门学习( 一 )
    对javascript变量提升跟函数提升的理解
    chrome浏览器好用的一些插件
  • 原文地址:https://www.cnblogs.com/rusking/p/4610400.html
Copyright © 2011-2022 走看看