一、概述  

  使用merge声明从一个或者更多个表或视图中筛选记录,以用来更新或者插入到一个表或视图中。你可以指定条件以决定是执行update操作还是insert操作到目标表或视图中。

  这个声明是一个方便的方式以联合多种操作。这样你就避免了大量的insert/update/delete这样的dml操作。

  merge是一个deterministic语句。你不能在对同一个目标表的merge语句中多次更新。

MERGE [INTO [schema .] table [t_alias] --数据集s(只能是表)
USING [schema .] { table | view | subquery } [t_alias] --数据集d(可以是表、子查询、视图)
ON ( condition ) --s和d的关联条件
WHEN MATCHED THEN merge_update_clause --d中符合关联条件的数据用来更新s关联到的数据记录
WHEN NOT MATCHED THEN merge_insert_clause;--d中不满足关联条件的数据插入到s数据集中

二、举例

  这里使用scott模式下的表举例:

  首先创建表并插入数据

--创建表
create table emp_dept(
empno number(4) primary key not null,
ename varchar2(10),
deptno number(2),
deptname varchar2(14)
); --插入数据
insert into emp_dept
select e.empno,e.ename,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno
and rownum < 5;

  修改表中部分ename使其和emp表中数据不同

   对比emp_dept表和emp,dept表连接查询的结果如下:

select *
from (select e.empno,e.ename,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno) s, emp_dept ed
where ed.empno(+) = s.empno;

  使用merge将emp,dept表连接查询出的结果插入到emp_dept表中

merge into emp_dept d--第一数据集:被插入数据的表
using (select e.empno,e.ename,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno) s--第二数据集
on (d.empno = s.empno)--d和s表的关联
when matched then
update set d.ename = s.ename
when not matched then
insert (empno,ename,deptno,deptname)
values(s.empno,s.ename,s.deptno,s.dname);
commit;--必须提交事务,否则无法看到数据

  在做联合查询结果如下:

oracle——merge的更多相关文章

  1. Oracle Merge into 详细介绍

    Oracle Merge into 详细介绍 /*Merge into 详细介绍MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查 ...

  2. Oracle merge

    oracle merge 語法:

  3. Oracle merge合并更新函数

    本博客介绍一下Oracle merge合并函数,业务场景:新增数据的时候要先查询数据库是否已经有改数据,有数据就更新数据,没数据才新增数据,这是很常见的业务场景,如果是用Oracle数据库的话,其实直 ...

  4. ORACLE MERGE INTO UPDATE DELETE 用法

    ORACLE MERGE INTO UPDATE DELETE 用法 使用该MERGE语句从一个或多个源中选择行以进行更新或插入表或视图.您可以指定条件以确定是更新还是插入目标表或视图. 此语句是组合 ...

  5. oracle merge into与sqlserver merge into 比较

    merge into: 在两个表之间,根据与源表联接的结果,对目标表执行插入.更新或删除操作. Oracle在9i引入了merge into命令,SQL Server 2008也引入merge int ...

  6. Oracle merge into的优势

    简介 Oracle merge into命令,顾名思义就是“有则更新,无则插入”,这个也是merge into 命令的核心思想,在实际开发过程中,我们会经常遇到这种通过两表互相关联匹配更新其中一个表的 ...

  7. Oracle—merge into语法

    oracle的merge into语法,在这种情况下: 基于某些字段,存在就更新,不存在就插入: 不需要先去判断一下记录是否存在,直接使用merge into merge into 语法: MERGE ...

  8. oracle merge into用法

    转载:http://blog.163.com/duanpeng3@126/blog/static/885437352011724104741817/ 在 平时更新数据时,经常有这样一种更新,即将目标表 ...

  9. Oracle merge into

    Oracle中Merge into用法总结 文件来源:(http://blog.csdn.net/yuzhic/article/details/1896878) 有一个表T,有两个字段a.b,我们想在 ...

  10. Oracle Merge备忘示例

    Oracle的merge语法非常实用,用于Insert.Update判断情况.以下是自己书写的一个示例,以免时间长了语法形式忘记了. MERGE INTO T_FR_GUOSZX T USING (S ...

随机推荐

  1. 第六十七篇、OC_UITableView head下拉图片放大的效果

    (一) 布置UITableview 我们首先要通过设置UITableview的内容偏移 self.tableView.contentInset 来为图片视图留出位置,这里我们的图片高度暂定为280 ; ...

  2. <img>元素底部为何有空白?

    原因: 图片文字等inline元素默认是和父级元素的baseline对齐的,即:vertical-align 的默认值是 baseline:而baseline又和父级底边bottom有一定距离: im ...

  3. 1. 走进java

    走进java 1.java简介 1.1 java分类: 1.2 开发包JDK 1.3.一处编译,到处运行的特点 2. 配置开发环境 3. java基本语法 3.1关键字和保留字 3.2 标识符命名规则 ...

  4. Fedora 19 配置参考

    1. 安装完Fedora 19之后,第一件事不是升级系统,而是添加源. 下载我配置好的源,非常全面,适用Fedora 19 x86_64.点我下载 打开终端,切换到repo.zip所在目录:mv re ...

  5. js设计模式(5)---外观模式

    0.前言 早上好,今天天气不错,估计有35度吧,坐在空调室里相当惬意,那么酒足饭饱之后就应该干些正事了. 1. 为什么使用外观模式 外观模式提供了一个高层接口,封装一些复杂操作或繁琐行为,方便调用.门 ...

  6. Scrapy源码学习(一)

    用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...

  7. Antelope 和Barracuda区别

    Antelope是innodb-base的文件格式, Barracude是innodb-plugin后引入的文件格式,同时Barracude也支持Antelope文件格式.两者区别在于: 文件格式 支 ...

  8. myeclipse配置下tomcat debug启动很无比慢

    myeclipse配置下tomcat debug启动很无比慢,而run启动很快今天照常使用MyEclipse 6.5 Blue Edition进行开发,但是却遇到一个怪问题.在MyEclipse环境下 ...

  9. 按键消抖VERILOG实现

    对于消抖,有很多种写法.今天分享一下我的写法. 基本思路: 1. 看图                     图1                                           ...

  10. Java Day 04

    01 语句 循环结构 嵌套  列的递减 1-5 2-5 3-5// 1-5 1-4 1-3 转义字符 \n 回车 \t 制表符 \b 退格 \r 按下回车键 windows 回车符由 \r \n 组成 ...