关于Oracle Insert 语句的子查询 和 with check option的用法

今日睇ocp教程  发现 insert语句还可以子查询例如:

INSERT INTO
      (SELECT employee_id, last_name,
                email, hire_date, job_id, salary,
                department_id
       FROM employees
       where department_id = 50
       )

VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)



系唔系有d无里头,多q余的感觉, 的确。特别是那个 "where department_id = 50"
 我系sybase一般都是写成下面的样子的:
INSERT INTO employees(      
employee_id, last_name,
                email, hire_date, job_id, salary,
                department_id)

VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)
他们之前有什么区别呢, 我测过 效果系一样的, 插入的果一条记录都系咁 如下图:


真系一沟样。。。。


但系 加入with check option 就大大不同了。
INSERT INTO
      (SELECT employee_id, last_name,
                email, hire_date, job_id, salary,
                department_id
       FROM employees
       where department_id = 50
witch check option
       )

VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)
这个一句能正常执行。



但是,修改一下, 将要插入的department_id 改成60 就失败了。

INSERT INTO
      (SELECT employee_id, last_name,
                email, hire_date, job_id, salary,
                department_id
       FROM employees
       where department_id = 50
       with check option
       )

VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,60)



因为加入with check option 不满足subquery中的where条件的话,就不允许插入.
上面的的where 条件是 department_id = 50, 而插入的值是60 所以失败了。

with check option还有另1个限制:。where条件指定的列如果不在insert的列中,也不允许插入
例如:

INSERT INTO
      (SELECT employee_id, last_name,
                email, hire_date, job_id, salary
               
       FROM employees
       where department_id = 50
       with check option
       )

VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000)




也就是要保证插入的数据 要跟子查询相对应。


如果不加入with check option, 上面的语句是能执行的

转载于:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996856.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard

apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所以需要用软件做一下键盘映射。 推荐使用这个:https://pqrs…

Python中键映射多个值的方法:defaultdict

Python中键映射多个值的方法有两种: 想保持元素的插入顺序就应该使用列表; 想去掉重复元素就使用集合并且不关心元素的顺序问题的话应该使用set from collections import defaultdictmapping defaultdict(list)mapping [key].append(value)mapping d…

该不该让Google收录WordPress的目录页和标签页?

只要有一点SEO知识的 站长都会注意利用相关文件和元标签来控制Google对网站的收录,对于WordPress网站来说,除了我们主动添加的内容页面,Google还会收录目录归档页,标签归档页,时间归档页,以及作者归档页。这…

【原创】MapReduce编程系列之表连接

问题描述需要连接的表如下:其中左边是child,右边是parent,我们要做的是找出grandchild和grandparent的对应关系,为此需要进行表的连接。 Tom Lucy Tom Jim Lucy David Lucy Lili Jim Lilei Jim SuSan Lily Green Lily Bians Green…

python logging模块简单使用

logging 是线程安全的,也就是说,在一个进程内的多个线程同时往同一个文件写日志是安全的。 但是多个进程往同一个文件写日志不是安全的。 import loggingLOG_FORMAT "%(asctime)s - %(levelname)s - %(message)s" DATE_FORMAT "%m/%d/…

OpenACC 中parallel 和kernels的区别

Kernels构件 Kernels构件源于PGI Accelerator模型的region构件。嵌套kernels构件里的循环可能会被编译器转换成能在GPU上高效并行的部分。在这个过程中有三步。 1:判断并行中遇到的循环。 2:把抽象的并行转换成硬件上的并行。对于NVIDIA CUDA GPU&#…

ORACLE基本SQL语句-查询篇

一、普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<3 /*模糊查询*/select * from stu where stu_id like stu001% 说明&#xff1a;通配符“%”代表一个或者多个字符&#xff0c;通配符“_”代表一个字符。 /*别名*/select S…

三次握手建立失败的几种情况以及三次握手的理解

上面的图是阻塞式socket进行通信的过程&#xff0c;阻塞的时候是操作系统内核网络协议栈在工作 调用 connect 函数将激发 TCP 的三次握手过程&#xff0c;而且仅在连接建立成功或出错时才返回。其中出错返回可能有以下几种情况&#xff1a; 1、三次握手无法建立&#xff0c;客…

db_name,instance_name,service_names,db_domain,dbid,oracle_sid等区别与联系

最近整理了一篇文章&#xff1a;oracle listener 有网友对数据库是否显式设置了instance_name和service_names提出疑问。 由此引发出db_name,instance_name,oracle_sid等等这些常见的参数都代表什么意思&#xff0c;怎么取值的&#xff0c;有什么区别&#xff1f; SQL> sele…

检测版本更新

如果我们要检测app版本的更新&#xff0c;那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息。 当前运行版本信息可以通过info.plist文件中的bundle version中获取&#xff1a; [cpp] view plaincopy NSDictionary *infoDic [[NSBundle mainBundle…

linux 启动/关闭多个py脚本

后台运行脚本 需求&#xff1a;很多时候我们会在 linux 服务器上执行 python 脚本&#xff0c;然而脚本程序执行的时间可能比较长&#xff0c;当耗时过长的情况下&#xff0c;我们使用 ssh 远程登录到 linux 服务器上容易造成超时自动断开连接&#xff0c;当用户注销时&#x…

在熟练使用2B铅笔前,请不要打开Axure

在互联网产品领域&#xff0c;Axure已成为产品经理、产品设计师以及交互设计师的必备工具&#xff0c;从某种程度讲&#xff0c;Axure帮助我们建立低保真模型&#xff0c;便于与用户的需求验证&#xff0c;也帮助我们构思交互细节&#xff0c;使前端和开发人员更容易理解我们的…

启用isqlplus

iSQL*Plus是sqlplus基于web方式发布的&#xff0c;要使用它只要在服务器上开启即可&#xff1a; [oraclelocalhost ~]$ isqlplusctl start perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE (unset), LC_ALL (unset)…

YUI 的模块信息配置优先级关系梳理

背景 YUI的配置参数较多&#xff0c; 可以在好几个地方配置一个module的相关信息&#xff0c; 如&#xff1a; //在全局配置&#xff0c; 所以YUI实例共享 YUI_config {modules: {w-autcomplete: {requires: [module1],path: test1.js,}},groups: {modules: {w-autocomplete: …

echarts 怎么知道鼠标点击的哪根柱子

有个需求&#xff0c;点击柱子&#xff0c;然后得到该柱子的信息&#xff0c;然后展示这个机房的时序图。 第一步卡住了&#xff0c;就是不知道如何获取柱子的序号。后参考&#xff1a;https://blog.csdn.net/zt_fucker/article/details/72461572?utm_sourceblogxgwz1 得到思路…

Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc

1.经典的select sql语句 //注意&#xff1a;包含空值的数学表达式求出的结果为空值 SQL> select salcomm from emp; //连接员工编号与员工姓名这两个字段 SQL> select empno||ename as "员工编号和员工姓名" from emp; //查询去掉重复行的员工部门编号 SQL>…

C++模板简单分析与举例

C模板简单分析与举例 #pragma once #include <iostream> /*/ C 模板 /*/ /* --- 函数模板 --- */ /// 声明 template <typename T1, typename T2> void TFunc(T1, T2); /// 一般定义 template <typename T1, typename T2> void TFunc(T1, T2) { std::cout &l…

flash builder4.7 for Mac升级AIRSDK详解

使用flash builder 打包ANE时或者打包ipa时候常常会遇到AIRSDK版本低的问题&#xff0c;然而flash builder4.7默认使用的AIRSDK是3.4而flash builder4.7 中 Flex SDK中默认的AIRSDK是3.1,大家可能有疑问怎么有二个AIRSDK。我的理解是Flex SDK中的AIRSDK是低版本&#xff0c;低版…

echarts formatter鼠标悬停显示信息

由于echarts中柱状图&#xff0c;鼠标放上去默认显示的是x轴名称以及y轴值。 而我现在需要再添加一些显示信息。 下面是操作&#xff1a; 在tooltip对象中补充trigger: “axis”,属性&#xff0c;然后再设置formatter。 tooltip : {formatter: function (params) {// do some …

codeforces 261 D

题目链接&#xff1a; 解题报告&#xff1a;给出一个序列a1,a2,a3.........an&#xff0c;f(i , j ,x) ak 等于x的个数(i < k < j)&#xff0c;令i < j&#xff0c;求有多少对 i 和 j 使得 f(1,i,ai) > f(j,n,aj)。 从左往右扫一遍这个序列&#xff0c;num1[i] 等于…