insert into (<subquery> WITH CHECK OPTION) values (...)

语法看起来很特殊,其实是insert进subquery的这张表里:

1. 只有插入的值在subquery列表中,且满足where条件时才能插入成功。

2. 如果不满足subquery里的where条件的话,就不允许插入。

3. 如果插入的列不在subquery里,那么也会不允许插入。

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

5. subquery其实是不会实际执行的。

//满足条件,成功插入

SQL> insert into (select deptno,dname from dept where deptno>50 with check option) values (90,'Tough');
已创建 1 行。

//deptno=45不满足where子句条件

SQL> insert into (select deptno,dname from dept where deptno>50 with check option) values (45,'Tough');

insert into (select deptno,dname from dept where deptno>50 with check option) values (45,'Tough')
                                      *
第 1 行出现错误:
ORA-01402: 视图 WITH CHECK OPTIDN where 子句违规

//插入的值不在subquery列表中,多值或少值都不行

SQL> insert into (select deptno,dname from dept where deptno>50 with check option) values (90,'Tough','TH');

insert into (select deptno,dname from dept where deptno>50 with check option) values (90,'Tough','TH')
            *
第 1 行出现错误:
ORA-00913: 值过多

SQL> insert into (select deptno,dname from dept where deptno>50 with check option) values (90);

insert into (select deptno,dname from dept where deptno>50 with check option) values (90)
            *
第 1 行出现错误:
ORA-00947: 没有足够的值

//不加WITH CHECK OPTION则在插入时不会检查

SQL> insert into (select deptno,dname from dept where deptno>50) values (45,'Tough');
已创建 1 行。

//subquery其实是不会实际执行的。从执行计划可以看出来

SQL> insert into (select deptno,dname from dept where deptno>50 with check option) values (91,'Tough');
已创建 1 行。

执行计划
----------------------------------------------------------

-------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | INSERT STATEMENT |      |     1 |    20 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------


insert into (select...WITH CHECK OPTION) values(...)的更多相关文章

  1. [每日一题] OCP1z0-047 :2013-08-04 INSERT --- WITH CHECK OPTION

    这题是考:insertWITH CHECK OPTION的用法 insert into (<select clause> WITH CHECKOPTION) values (...) 这样 ...

  2. PLSQL_基础系列05_视图控制WITH CHECK OPTION(案例)

    2014-12-09 Created By BaoXinjian

  3. with check option

    通过有with check option选项的视图操作基表(只是面对单表,对连接多表的视图正在寻找答案),有以下结论:首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过 ...

  4. ORACLE 视图的 with check option

    ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...

  5. view WITH CHECK OPTION where-clause violation(查看与检查选项where-子句违反)

    创建视图的语句是设置了 WITH CHECK OPTION 这个条件; 创建视图时,sql语句是这样写的: CREATE  OR  REPLACE  VIEW  RZ_TST_VIEW AS WHER ...

  6. with check option(视图 )

    建立视图的时候使用WITH CHECK OPTION 与不使用的区别 WITH CHECK OPTION insert update  delete 使用with check option 保证ins ...

  7. SQL中的with check option(转)

    student表: 95001 李勇 男 20 CS 95002 刘晨 女 21 IS 95003 王敏 女 18 MA 95004 张力 男 19 IS 建立视图IS_STUDENT显示“IS”系所 ...

  8. 批量 1 insert into select 2 sqldataadapter.update 3 SELECT INTO FROM (要求目标表不存在) 4 AddRange(ef) 5 MySqlBulkLoader.Load() 6 BatchInsert 7 insert bulk

     insert into a(col1,col2) select top 1 '1','2' from a union select top 1 '3','4' from a    SELECT IN ...

  9. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...

随机推荐

  1. Flask的部署

    当前对部署flask的一些学习: 1.全局安装nginx 1.1 nginx的配置文件怎么写? $ sudo rm /etc/nginx/sites-enabled/default $ sudo to ...

  2. PL/SQL developer 使用技巧汇总

    为了快速的使用PL/SQL developer 进行 oracle数据库相关开发,将一些使用频率较高的使用技巧进行汇总如下,以下转自网络和自己的测试 1.切换schema --switch schem ...

  3. MySQL密码忘记之解决方法

    方法一: 通过修改配置文件来登录mysql,方法也不难. 操作步骤: 在安装目录下找到配置文件my.ini 2.在my.ini中找到 [mysqld]字段,在它底下加上skip-grant-table ...

  4. ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

  5. 通用函数get和set

    这两个函数在画图时很常用,所有对象都有属性来定义它们的特征,正是通过设定这些属性来修正图形显示的方式.尽管许多属性所有的对象都有,但与每一种对象类型(比如坐标轴,线,曲面)相关的属性列表都是独一无二的 ...

  6. 转:nginx 从入门到精通的博文

    转:http://tengine.taobao.org/book/ Nginx开发从入门到精通   缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众 ...

  7. ubuntu(16.04.01)学习-day1

    1.修改root用户密码 sudo passwd root 按提示进行设置. 2.从Ubuntu 16.04开始,用户可以实现改变启动器的位置,可以将启动器移到屏幕底部,但是无法移到右边或顶部.打开终 ...

  8. 第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码

    AV Foundation提供了直接处理媒体样本的低级功能,其中需要使用的两个重要的类,AVAssetReader和AVAssetWrite,AVAssetReader用于从AVAsset资源读取媒体 ...

  9. XCode中的特殊快捷键图标

    ⌘——Command () ⌃ ——Control ⌥——Option (alt) ⇧——Shift ⇪——Caps Lock fn——功能键就是fn

  10. c# using 引用和别名的使用

    1.使用别名 在同时引用的两个命名空间中有相同的类型时,可以使用别名来区分.如下所示: using System; using System.Threading; using System.Timer ...