zoukankan      html  css  js  c++  java
  • Oracle INSERT WITH CHECK OPTION的用法

    insert into (<select clause> WITH CHECK OPTION) values (...)

    例如:

    SQL> insert into (select object_id,object_name,object_type from xxx where object_id<1000 WITH CHECK OPTION)
    2 values(999,'testbyhao','testtype');

    这样的语法看起来很特殊,其实是insert进subquery里的这张表里,只不过如果不满足subquery里的where条件的话,就不允许插入。

    如果插入的列有不在subquery作为检查的where条件里,那么也会不允许插入。

    如果不加WITH CHECK OPTION则在插入时不会检查。

    这里注意,subquery其实是不会实际执行的。


    例如:

    SQL> insert into (select object_id,object_name,object_type from xxx where object_id<1000)
    2 values(1001,'testbyhao','testtype');
    
    1 row created.
    
    
    SQL> insert into (select object_id,object_name,object_type from xxx where object_id<1000with check option)
    2 values(1001,'testbyhao','testtype');
    insert into (select object_id,object_name,object_type from xxx where object_id<1000 with check option)
    *
    ERROR at line 1:
    ORA-01402: view WITH CHECK OPTION where-clause violation

    这里插入的列中没有object_id,也是不允许插入的:

    SQL> insert into (select object_name,object_type from xxx where object_id<1000 with check option)
    2 values('testbyhao','testtype');
    insert into (select object_name,object_type from xxx where object_id<1000 with check option)
    *
    ERROR at line 1:
    ORA-01402: view WITH CHECK OPTION where-clause violation

    为什么说subquery没有实际执行呢?看统计信息吧:

    SQL> set autotrace trace exp stat
    SQL> select object_id,object_name,object_type from xxx where object_id<1000;
    
    955 rows selected.
    97 consistent gets
    
    SQL> insert into (select object_id,object_name,object_type from xxx where object_id<1000)
    2 values(999,'testbyhao','testtype');
    
    1 row created.
    1 consistent gets
  • 相关阅读:
    一、linux 挂起进程 nohup
    1.C#窗体和控件
    C#笔记——5.迭代器
    C#笔记——4.集合
    设计模式——3.观察者模式
    设计模式——2.策略模式
    Code基础——1.数据结构
    设计模式——1.模板方法
    C#笔记——3.泛型
    C#笔记——2.委托
  • 原文地址:https://www.cnblogs.com/iImax/p/2678982.html
Copyright © 2011-2022 走看看