Oracle存在则更新,不存在则插入应用-merge
转:
Oracle存在则更新,不存在则插入应用-merge
Oracle在9i引入了merge命令,
通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作.
当然是update还是insert是依据于你的指定的条件判断的,Merge
into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表.
MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表
- MERGE INTO table_name alias1
- USING (table|view|sub_query) alias2
- ON (join condition)
- WHEN MATCHED THEN
- UPDATE table_name
- SET col1 = col_val1,
- col2 = col_val2
- WHEN NOT MATCHED THEN
- INSERT (column_list) VALUES (column_values);
在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。
因此,严格意义上讲,“在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。”
实例:
T有a、b两个字段 a是主键。现在有记录(1001,2)要保存到T中,T中如果已经存在则更新字段b,没有插入。
- MERGE INTO T T1
- USING (SELECT '1001' AS a,2 AS b FROM dual) T2
- ON ( T1.a=T2.a)
- WHEN MATCHED THEN
- UPDATE SET T1.b = T2.b
- WHEN NOT MATCHED THEN
- INSERT (a,b) VALUES(T2.a,T2.b);
实例:
mybatist 中的sql:
- <insert id="mergeInto" >
- MERGE INTO CATEGORY_EXPERT_GRADE T1
- USING ( select ${categoryFk} as a, ${expertFk} as b FROM dual) T2
- ON ( T1.CATEGORY_FK=T2.a and T1.EXPERT_FK=T2.b)
- WHEN MATCHED THEN
- UPDATE SET T1.GRADE = #{grade,jdbcType=VARCHAR}
- WHEN NOT MATCHED THEN
- insert (PK, CATEGORY_FK, EXPERT_FK,GRADE, SAVE_DATE, FLAG,EXTEND1, EXTEND2, EXTEND3)
- values (Sequence_Shzj.nextval, #{categoryFk,jdbcType=DECIMAL}, #{expertFk,jdbcType=DECIMAL},
- #{grade,jdbcType=VARCHAR}, #{saveDate,jdbcType=DATE}, #{flag,jdbcType=DECIMAL},
- #{extend1,jdbcType=VARCHAR}, #{extend2,jdbcType=VARCHAR}, #{extend3,jdbcType=VARCHAR}
- )
- </insert>
Oracle存在则更新,不存在则插入应用-merge的更多相关文章
- [转]Oracle存在则更新,不存在则插入
原文:http://hi.baidu.com/mawf2008/item/eec8c7ad1c5be5ae29ce9da6 merge into a using bon (a.a=b.b)when m ...
- Oracle整合Mybatis实现list数据插入时,存在就更新,不存在就插入以及随机抽取一条记录
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 Oracle整合Mybatis实现list数据插入时,存在就更新,不存在就插入 entity 对应表中字段,如不对应,在xml中起别名 map ...
- 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的差别,sql文件导入
1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...
- 认识oracle的update更新
这两天给新同事安排了一个工作,即做一个update 的级联更新,在实际操作中发现了一个问题.就是对于Oracle的更新的语法,大部分人尤其是学过SqlServer的人在使用oracle的时候对于ora ...
- Oracle多表更新及MERGE命令和闪回机制还原数据表
一.多表更新 比如线上有个系统由于某一个模块出现异常,导致系统整体的数据出现了错误,需要你手动改写数据库错误,Oracle update语句更新的值来自另一张表 update语法最基本的格式为 UPD ...
- Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...
- 转 SSIS处理导入数据时, 存在的更新, 不存在的插入
SSIS处理导入数据时, 存在的更新, 不存在的插入 分类: DTS/SSIS2006-09-10 12:43 18185人阅读 评论(22) 收藏 举报 ssissql servermicrosof ...
- 使用LKDBHelper 插入相同id时候应该是更新数据而不是插入新的数据
要实现使用LKDBHelp 插入相同id时候应该是更新数据而不是插入新的数据 例如#import "JSONModel.h" @interface InfoModel : JSON ...
- Oracle + Entity Framework 更新没有设置主键的表
最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作. 那么,应该怎么处理没有主键的表呢? 我们打开这个表的edmx文件 ...
随机推荐
- Linux中安装配置启动关闭nginx等一系列动作
Nginx简介 1.Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器: 2.Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的 ...
- MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子
/*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...
- Spring MVC 学习笔记(二)
6. 视图和视图解析器 ❤ Spring MVC如何解析视图 • 请求处理方法执行完成后,最终返回一个ModelAndView对象 ...
- 数据库概念 MySQL语法
数据库概念 将保存的数据部分,存到一个公共的地方,所有的用户涉及到数据相关都必须来这个公共地方查找 MySQL 本质就是一款基于网络通信的应用软件,任何基于网络通信的软件底层都是socket 可以把M ...
- STM32F10XX学习笔记的石墨连接
https://shimo.im/docs/QHGRrWxbeb0NiBm9/ <STM32F10X系列笔记>,可复制链接后用石墨文档 App 打开
- 51NOD 1452 - 加括号
DP预处理每个区间的值,再枚举括号位置就好了 #include <bits/stdc++.h> using namespace std; typedef long long ll; con ...
- javascript动态合并表格相同的单元格
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...
- javascript权威指南第22章高级技巧
HTML <!DOCTYPE html> <html> <head> </head> <body> <div style=" ...
- 004_软件安装之_Altium Designer
文件中有软件简单视频教程,安装有pdf教程 链接:https://pan.baidu.com/s/1ow-OHdsPuAyXCevjCVqEsg 提取码:l2rt 复制这段内容后打开百度网盘手机App ...
- Spring第四天
顾问包装通知 通知(advice)是Spring中的一种比较简单的切面,只能将切面织入到目标类的所有方法中,而无法对指定方法进行增强 顾问(advisor)是Spring提供的另外一种切面,可以织入到 ...