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

    1. INSERT

    INSERT INTO(<SELECT CLAUSE> WITH CHECK OPTION) VALUES(...)

    for example:

    CREATE TABLE sharon_test(ID NUMBER, NAME VARCHAR2(20), TYPE VARCHAR2(20));
    INSERT INTO(SELECT ID, NAME, TYPE FROM sharon_test WHERE ID < 10 WITH CHECK OPTION) VALUES(9, 'test', 'test');

    这种语法看起来很特殊,实际上是insert进subquery中的这张表里,只不过如果不满足subquery中的where条件的话,就不允许插入。同样,where条件指定的列如果
    不在insert的列中,也不允许插入。如果不加WITH CHECK OPTION的话,则不作检查。需要注意的是,subquery实际上不会被执行。例如:

    (1) 无WITH CHECK OPTION

    SQL> insert into(select id, name, type from sharon_test where id < 10) values(11, 'test', 'test');--

    1 row inserted

    (2) 有WITH CHECK OPTION,且不满足where条件

    SQL> insert into(select id, name, type from sharon_test where id < 10 with check option) values(11, 'test', 'test');

    insert into(select id, name, type from sharon_test where id < 10 with check option) values(11, 'test', 'test')

    ORA-01402: view WITH CHECK OPTION where-clause violation

    (3) where条件列不在插入列中

    SQL> insert into(select name, type from sharon_test where id < 10 with check option) values('test', 'test');

    insert into(select name, type from sharon_test where id < 10 with check option) values('test', 'test')

    ORA-01402: view WITH CHECK OPTION where-clause violation 

    2. VIEW

      创建一个视图:

    CREATE VIEW test_view AS SELECT ID, NAME FROM sharon_test WHERE TYPE = 'test' WITH CHECK OPTION;
    INSERT INTO test_view VALUES(12, 'dev');

    执行insert语句时,同样会报ORA-01402: view WITH CHECK OPTION where-clause violation 这个error,去掉WITH CHECK OPTION的话则可以。WITH CHECK OPTION可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如insert,那么加的这条记录在刷新视图后必须可以看到;update,修改完的结果也必须能通过该视图看到;delete,则只能删除该视图中显示的记录。因此,使用WITH CHECK OPTION,必须考虑到不让它在修改完后从视图中消失。任何导致记录消失的修改都会被取消,并显示错误信息。

  • 相关阅读:
    在sed中怎么样产生控制字符^M
    递归遍历目录的shell脚本
    递归法遍历目录查找文件
    【30.01%】【hdu 3397】Sequence operation
    【23.68%】【hdu 2871】Memory Control
    【33.18%】【hdu 5877】Weak Pair (3种解法)
    【38.96%】【hdu 1540】Tunnel Warfare
    【26.8%】【CF 46D】Parking Lot
    【35.20%】【CF 706D】Vasiliy's Multiset
    【33.20%】【LA 4320】【Ping pong】
  • 原文地址:https://www.cnblogs.com/prettymdx/p/2127304.html
Copyright © 2011-2022 走看看