oracle数据库数据合并,Oracle合并数据
本篇文章帮大家学习Oracle合并数据,包含了Oracle合并数据使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。
在本教程中将学习如何使用Oracle MERGE语句来执行更新或基于指定条件插入数据。
Oracle MERGE语句简介
Oracle MERGE语句从一个或多个源表中选择数据并更新或将其插入到目标表中。 MERGE语句可指定一个条件来确定是更新数据还是将数据插入到目标表中。
以下说明了Oracle MERGE语句的语法:
MERGE INTO target_table
USING source_table
ON search_condition
WHEN MATCHED THEN
UPDATE SET col1 = value1, col2 = value2,...
WHERE
[DELETE WHERE ]
WHEN NOT MATCHED THEN
INSERT (col1,col2,...)
values(value1,value2,...)
WHERE ;
下面来仔细看看上面MERGE语句的语法:
首先,指定要在INTO子句中更新或插入的目标表(target_table)。
其次,指定要更新或插入USING子句中的数据源(source_table)。
第三,指定合并操作在ON子句中更新或插入的搜索条件。
对于目标表中的每一行,Oracle都会评估搜索条件:
如果结果为true,则Oracle使用源表(source_table)中的相应数据更新该行。
如果任何行的结果为false,则Oracle将源表(source_table)中相应的行插入到目标表(target_table)中。
当想要在单个操作中组合多个INSERT,UPDATE和DELETE语句时,MERGE语句变得很方便。
因为MERGE是确定性语句,所以不能在同一个MERGE语句中多次更新目标表的同一行。
可以将一个可选的DELETE WHERE子句添加到MATCHED子句中,以在合并操作之后进行清理。 DELETE子句只删除目标表中与ON和DELETE WHERE子句匹配的行。
Oracle MERGE前提条件
要执行MERGE语句,必须在源表上具有INSERT和UPDATE对象权限。 如果使用DELETE子句,则还必须在目标表上具有DELETE对象特权。
Oracle MERGE示例
假设有两个表:members和member_staging。
每当有一个新会员信息时,则插入一个新的行记录到members表。 然后,members表中的数据将与member_staging表的数据合并。
以下语句用于创建members和member_staging表:
CREATE TABLE members (
member_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
rank VARCHAR2(20)
);
CREATE TABLE member_staging AS
SELECT * FROM members;
使用以下INSERT语句将示例数据插入到members和member_staging表中:
-- insert into members table
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(1,'Abel','Wolf','Gold');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(2,'Clarita','Franco','Platinum');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(3,'Darryl','Giles','Silver');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(4,'Dorthea','Suarez','Silver');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(5,'Katrina','Wheeler','Silver');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(6,'Lilian','Garza','Silver');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(7,'Ossie','Summers','Gold');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(8,'Paige','Mcfarland','Platinum');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(9,'Ronna','Britt','Platinum');
INSERT INTO members(member_id, first_name, last_name, rank) VALUES(10,'Tressie','Short','Bronze');
-- insert into member_staging table
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(1,'Abel','Wolf','Silver');
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(2,'Clarita','Franco','Platinum');
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(3,'Darryl','Giles','Bronze');
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(4,'Dorthea','Gate','Gold');
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(5,'Katrina','Wheeler','Silver');
INSERT INTO member_staging(member_id, first_name, last_name, rank) VALUES(6,'Lilian','Stark','Silver');
将members表中的数据更新到member_staging表时,应该执行以下操作:
更新成员id为1,3,4和6的行记录,因为表中这些成员的排名或姓氏是不同的。
要插入成员id为7到10的行记录,这是因为这些行存在于members表中,但不存在于member_staging表中。
总共有8行数据需要合并。参考以下图示 -
以下是一次性执行所有这些操作的MERGE语句。
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHERE x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
WHEN NOT MATCHED THEN
INSERT(x.member_id, x.first_name, x.last_name, x.rank)
VALUES(y.member_id, y.first_name, y.last_name, y.rank);
merge语句根据member_id列中的值(参见上面的ON子句),将member表中的每一行与member_staging表中的每一行进行比较。
如果两个表的member_id列中的值相等,MERGE语句只有在两个表的first_name,last_name或rank列的不值时,才将members表中的first_name,last_name或rank列的不值作为member_staging对应列的值来更新,否则它将members的行直接插入member_staging表。
Oracle按照预期返回了8行合并数据。
在本教程中,您已学习如何使用Oracle MERGE语句根据指定的条件更新或插入数据。
oracle数据库数据合并,Oracle合并数据相关推荐
- 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?
Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Orac ...
- Linux系统中Oracle数据库使用SELECT语句检索数据(1)实例应用
Linux系统中Oracle数据库使用SELECT语句检索数据(1)实例应用 1,首先切换到Oracle用户,并进入数据库#sql / as sysdba2,启动数据库,并连接样例及表格,启动命令#s ...
- Oracle数据库中插入日期型数据
如果插入Oracle的当前系统时间可以用 SYSDATE INSERT INTO FLOOR VALUES ( SYSDATE ) ; 往Oracle数据库中插入日期型数据(to_date的用法) 今 ...
- oracle数据库50题,ORACLE数据库试题
<ORACLE数据库试题>由会员分享,可在线阅读,更多相关<ORACLE数据库试题(10页珍藏版)>请在人人文库网上搜索. 1.ORACLE数据库试题1. 以下关于数据的逻辑结 ...
- oracle数据库基础测试,ORACLE数据库基础测试题oracle数据库复习题.docx
<ORACLE数据库基础测试题oracle数据库复习题.docx>由会员分享,可在线阅读,更多相关<ORACLE数据库基础测试题oracle数据库复习题.docx(18页珍藏版)&g ...
- oracle中毒,oracle数据库中毒恢复 oracle数据库解密恢复 服务器中勒索病毒解密恢复.Hermes666...
oracle数据库中毒恢复 oracle数据库解密恢复 服务器中勒索病毒解密恢复.Hermes666 客户名称 保密 数据类型 oracle 11G 数据容量 100 gb 故障类型 服务器中毒,文件 ...
- oracle免费的环境,【Oracle数据库免费版】Oracle数据库官方下载 v11gR2 免费版-趣致软件园...
Oracle数据库免费版是一款比较实用的数据库软件,内含强大的功能,支持对数据的完整管理,而且还能实现保存的持久性.Oracle数据库官方版采用了分布式的处理,支持各种数据库的运行,同时软件还能为大大 ...
- arcgis读取oracle数据库,arcgis连接Oracle数据库
arcgis连接Oracle数据库 配置声明:本人的电脑是win10 64位,安装的Oracle是oracleR11gr2 64 arcgis版本位10.2 安装是在同一台电脑上. 一.首先是安装O ...
- Oracle数据库教程(Oracle备份、恢复、升级、迁移)视频教程
Oracle数据库教程(Oracle备份.恢复.升级.迁移)视频教程 风哥Oracle备份恢复与迁移升级专题包括:Oracle备份恢复基础.用户模式的备份恢复.RMAN备份恢复.Flashback闪回 ...
- oracle 连接组件,[2021] node连接oracle数据库示例[使用oracle官方组件]
[2021] node连接oracle数据库示例[使用oracle官方组件] node 连接 oracle 示例 本示例采用的 oracledb 和 instantclient-basic-windo ...
最新文章
- 利用python中的gzip模块压缩和解压数据流和文件
- 讲给普通人听的分布式数据存储
- yolo v3 fatal : Memory allocation failure
- 从三点解读,入行Java从业前景如何?
- 使用.NET类库操作CSV文件
- 消息队列_消息队列:kafka
- 2016大数据发展7大趋势
- 喇叭正反相位测试音频_FIR滤波器能给音频扩声带来怎样的帮助?
- 美团陶云霜:CRM平台建设实践(胶片)
- MacBook设置终端命令行的颜色高亮显示
- HTML标签之间有什么区别 div 和span?/span
- 力扣-1267 统计参与通信的服务器
- 【Python实例第11讲】文本的核外分类
- mysql表的默认所有者_MySQL数据库基本管理-001
- Linux 远程登录配置
- todotree配置
- eclipse简单的中英文切换,觉大多数的版本都可以
- 自然语言处理(NLP):08 PyTorch深度学习之LSTM微博评论情感分析
- .jar文件打开方式没有Java(TM) Platform SE binary怎么办?
- mysql生成连续数字或日期