用途 merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。
该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。
merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。
语法
其中,merge_insert_clause::=
关键字、参数
into 子句
在into子句中指定所要修改或者插入数据的目标表
using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。
on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的那些行,oracle则插入数据源中相应数据。
when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。
merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
范例 merge 范例
下面的例子在oe模式下创建一个bonuses表,bonus的缺省值为100。然后插入bonuses表所有有成绩的销售人员(基于oe_orders 表的sqles_rep_id字段)。最后,人力资源管理人员决定,所有的人员将得到分红。没有销售成绩的员工得到工资的1%的分红,而那些有销售成绩的员工将得到缺省分红以及工资的1%。可以用一条merge语句将完成上述修改:
create table bonuses (employee_id number, bonus number default 100);
insert into bonuses(employee_id)
(select e.employee_id from employees e, orders o
where e.employee_id = o.sales_rep_id
group by e.employee_id);
select * from bonuses;
employee_id bonus
----------- ----------
153 100
154 100
155 100
156 100
158 100
159 100
160 100
161 100
163 100
merge into bonuses d
using (select employee_id, salary, department_id from employees
where department_id = 80) s
on (d.employee_id = s.employee_id)
when matched then update set d.bonus = d.bonus + s.salary*.01
when not matched then insert (d.employee_id, d.bonus)
values (s.employee_id, s.salary*0.01);
employee_id bonus
----------- ----------
153 180
154 175
155 170
156 200
158 190
159 180
160 175
161 170
163 195
157 95
145 14
170 96
179 62
152 90
169 100
在ibatis应用中的一个例子:
<update id="mergeAdoptDept" parameterClass="adoptDept">
MERGE INTO ADMIN_J230_DEPT DEPT
USING (
SELECT #deptCd# AS DEPT_CD , #deptNm# AS DEPT_NM , #visibleYn# AS VISIBLE_YN
FROM DUAL
)DT
ON ( DEPT.DEPT_CD = DT.DEPT_CD )
WHEN MATCHED THEN
UPDATE SET DEPT.DEPT_NM = DT.DEPT_NM, DEPT.VISIBLE_YN = DT.VISIBLE_YN
WHEN NOT MATCHED THEN
INSERT ( DEPT_CD, DEPT_NM, VISIBLE_YN )
VALUES ( DT.DEPT_CD, DT.DEPT_NM, DT.VISIBLE_YN )
</update>
该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。
merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。
语法
其中,merge_insert_clause::=
关键字、参数
into 子句
在into子句中指定所要修改或者插入数据的目标表
using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。
on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的那些行,oracle则插入数据源中相应数据。
when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。
merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
范例 merge 范例
下面的例子在oe模式下创建一个bonuses表,bonus的缺省值为100。然后插入bonuses表所有有成绩的销售人员(基于oe_orders 表的sqles_rep_id字段)。最后,人力资源管理人员决定,所有的人员将得到分红。没有销售成绩的员工得到工资的1%的分红,而那些有销售成绩的员工将得到缺省分红以及工资的1%。可以用一条merge语句将完成上述修改:
create table bonuses (employee_id number, bonus number default 100);
insert into bonuses(employee_id)
(select e.employee_id from employees e, orders o
where e.employee_id = o.sales_rep_id
group by e.employee_id);
select * from bonuses;
employee_id bonus
----------- ----------
153 100
154 100
155 100
156 100
158 100
159 100
160 100
161 100
163 100
merge into bonuses d
using (select employee_id, salary, department_id from employees
where department_id = 80) s
on (d.employee_id = s.employee_id)
when matched then update set d.bonus = d.bonus + s.salary*.01
when not matched then insert (d.employee_id, d.bonus)
values (s.employee_id, s.salary*0.01);
employee_id bonus
----------- ----------
153 180
154 175
155 170
156 200
158 190
159 180
160 175
161 170
163 195
157 95
145 14
170 96
179 62
152 90
169 100
在ibatis应用中的一个例子:
<update id="mergeAdoptDept" parameterClass="adoptDept">
MERGE INTO ADMIN_J230_DEPT DEPT
USING (
SELECT #deptCd# AS DEPT_CD , #deptNm# AS DEPT_NM , #visibleYn# AS VISIBLE_YN
FROM DUAL
)DT
ON ( DEPT.DEPT_CD = DT.DEPT_CD )
WHEN MATCHED THEN
UPDATE SET DEPT.DEPT_NM = DT.DEPT_NM, DEPT.VISIBLE_YN = DT.VISIBLE_YN
WHEN NOT MATCHED THEN
INSERT ( DEPT_CD, DEPT_NM, VISIBLE_YN )
VALUES ( DT.DEPT_CD, DT.DEPT_NM, DT.VISIBLE_YN )
</update>
发表评论
-
linux常用命令二
2012-09-21 17:11 832// 查看IP地址 $ ifconfig // ... -
linux 共享磁盘mount
2012-09-21 16:25 1821用root用户登录linux系统 步骤 1 cd 进入m ... -
linux 安装jdk
2012-09-21 14:39 785下载linux环境下的jdk安装包:j2sdk-1_4_2_ ... -
stat命令(获取文件信息)
2012-02-10 12:43 974>ll drwxr-xr-x 3 root root 7 ... -
shell实现文件拆分
2011-12-23 14:33 3383#!/bin/sh #方法二 SUFFIX=txt #源目录: ... -
suse linux 10 安装JDK 配置环境变量
2011-12-23 14:28 73051.JDK安装 下载最新Linux ... -
shell实现FTP上传文件
2011-11-16 17:59 1046#!/bin/sh echo "open 192.1 ... -
Linux系统CPU使用情况
2011-11-16 14:35 3446linux下有几个命令可以从系统中提取出CPU或内存的使用情况 ... -
shell脚本实现系统监视统计
2011-11-16 14:18 12851、监视系统统计信息 要自动监视系统的磁盘空间,首先要使用可以 ... -
shell下获取系统时间的方法
2011-11-16 13:39 1388直接调用系统变量 获取今天时期:`date +%Y%m%d` ... -
操作系统
2011-08-04 17:53 925操作系统:Windows、UNIX、Linux、MAC(苹果专 ... -
linux crontab 定时任务
2011-05-10 15:49 14751. crontab 用来执行定时任务 1.1 命令格式: ... -
Linux系统下查看oracle SID的方法
2011-04-11 17:01 26551. 登陆oracle用户 2. 修改/home/ora ... -
linux下oracle数据库服务和监听的启动停止
2011-04-11 16:59 15461、启动数据库: oracle@suse92:~> sq ... -
linux SCP 文件传输
2011-03-31 16:56 3737linux 文件传输 #将本地文件复制到远程服务器中(远程服 ... -
linux Tcl、expect 安装
2011-03-30 16:06 5790需要两个安装程序tcl8.4.13-src.tar.gz、ex ... -
linux常用命令一
2011-02-22 17:48 2041--将username用户添加到groupname组中 use ... -
Linux远程拷贝之ftp与scp命令
2010-12-30 15:14 2400ftp命令: 其中一台 ...
相关推荐
标题:Oracle Merge Into 的使用 描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为...
在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...
在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...
### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...
如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这样的话需要写更多的代码,同时性能也不好,要来回数据库两次.使用merge的话则可以一条SQL语句完成. 1)主要功能 ...
Oracle 数据库中 Merge Into 的用法 在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则...
首先,需要使用Oracle 9i及其以后版本支持的merge into语句,该语句可以实现insertOrUpdate的功能。然后,使用Mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表。foreach的 ...
### Oracle Merge 用法详解 #### 一、Oracle Merge 命令介绍 自Oracle 9i版本开始,Oracle数据库引入了一个非常强大的SQL语句——`MERGE`命令。通过这个命令,用户可以在一个单一的SQL语句中完成对表的插入(`...
Oracle的MERGE语句是一种强大的数据操作工具,它在Oracle9i版本中被引入,用于合并UPDATE和INSERT操作。在处理需要根据特定条件更新或插入数据的场景时,MERGE语句提供了高效的解决方案,尤其适合那些需要在单个SQL...
"Oracle Merge 函数详解" Oracle Merge 函数是一种强大的数据操作语句,用于从一个表中选择一些数据更新或者插入到另一个表中。Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge ...
Oracle中的`MERGE INTO`语句是一种强大的工具,用于整合数据操作,如更新、插入和删除,基于两个数据源的匹配条件。这个语句在处理数据仓库、数据同步或者复杂业务逻辑时非常有用。让我们详细了解一下`MERGE INTO`的...
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...
merge 详解 及实例 优点: — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 — 使用merge比传统的先判断再选择插入或更新快很多
### Oracle Merge 语句详解 #### 一、引言 在数据库管理中,尤其是在处理大量数据的场景下,高效地更新或插入数据是一项至关重要的任务。Oracle 9i R2 版本引入了一种名为 `MERGE` 的新功能,这一功能在业界被称为...
下面将详细阐述如何使用这两个工具以及如何通过`MERGE INTO`语句进行数据合并更新。 1. SQLULDR2导出数据: SQLULDR2是Oracle提供的一款数据导出工具,它能够快速地将数据库中的数据导出到文本文件或其他格式的...