Oracle更新的两种方式(merge/update内联视图)
来源:互联网 发布:经典网络推广文案 编辑:程序博客网 时间:2024/04/29 13:25
对于Oracle的两表联合更新的场景(有A、B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:
创建用例表:
CREATE TABLE test1(ID NUMBER(10),NAME VARCHAR2(20));
INSERT INTO test1 VALUES(1,'lucy');
INSERT INTO test1 VALUES(2,'lily');
CREATE TABLE test2(ID NUMBER(10),NAME VARCHAR2(20));
INSERT INTO test2 VALUES(1,'lucy');
INSERT INTO test2 VALUES(2,'hanmeimei');
merge方式:
MERGE INTO test1 USING test2
ON (test1.id = test2.id)
WHEN MATCHED THEN UPDATE
SET test1.name = NVL2(test1.name,test2.name,test1.name);
merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式。
update内联视图方式:
使用这种方式必须在test2.id上有主键(这里很好理解,必须保证每一个test1.id对应在test2里只有一条记录,如果test2中有多条对应的记录,怎么更新test1?),一般而言这种方式代价比merge方式稍高。
ALTER TABLE test2 ADD CONSTRAINT pk_test2 PRIMARY KEY(ID);
UPDATE (SELECT a.id aid,a.name aname,b.id bid,b.name bname FROM TEST1 a,test2 b WHERE a.id=b.id) t
SET aname = NVL2(aname,bname,aname);
使用并行,加快大量数据更新:
MERGE /*+parallel(test1,4)*/ INTO test1 USING test2
ON (test1.id = test2.id)
WHEN MATCHED THEN UPDATE
SET test1.name = NVL2(test1.name,test2.name,test1.name);
- Oracle更新的两种方式(merge/update内联视图)
- mybatis执行批量更新batch update 的方法(提供oracle,mysql两种写法)
- ORACLE 两表更新 update
- oracle的update更新
- Oracle Update 一定还有你不知道的更新方式
- UITableView: 刷新视图、插入行、更新行的两种方式
- AngularJS(三)视图绑定数据的两种方式
- hibernate映射视图的两种方式
- IOS加载视图的两种方式
- Update视图数据(oracle)
- 认识oracle的update更新
- 认识oracle的update更新
- Oracle 内联视图优化,视图合并的抉择
- 视图控制器-(多视图跳转的两种方式)
- 等值更新的两种方式
- Android 更新UI的两种方式
- Oracle之merge妙用,两值相互交叉更新
- oracle view视图update
- mismatch 源码剖析
- 跟我学Redis(12)—redis发布与订阅
- JAVA冒泡排序
- DAY 3 PAT 1004. 成绩排名 (20)
- grep命令详解
- Oracle更新的两种方式(merge/update内联视图)
- #include “”和#include<>的区别
- 安卓机上的微信返回键之后页面不刷新
- leetcode:Integer to Roman [12]
- 246. Strobogrammatic Number
- Fresco介绍 - 一个新的android图片加载库
- 下一个较大元素
- xUtils的使用总结(草稿未完善)
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音